From 50919bbbf6de5d389a08ba1ae5af1048e9df8124 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 1 Nov 2024 22:16:54 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DateTime.Subtract=20?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=BE=97=E5=88=B0=E7=A7=92=E5=B7=AE=E5=80=BC?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Provider.ClickHouse/ClickHouseExpression.cs | 1 - Providers/FreeSql.Provider.Custom/CustomAdapter.cs | 1 - Providers/FreeSql.Provider.Custom/CustomExpression.cs | 1 - .../FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs | 7 +++---- .../Oracle/CustomOracleExpression.cs | 3 +-- .../PostgreSQL/CustomPostgreSQLExpression.cs | 5 ++--- .../SqlServer/CustomSqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Dameng/DamengExpression.cs | 3 +-- Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs | 3 +-- Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs | 1 - Providers/FreeSql.Provider.GBase/GBaseExpression.cs | 3 +-- .../FreeSql.Provider.KingbaseES/KingbaseESExpression.cs | 5 ++--- Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs | 1 - Providers/FreeSql.Provider.MySql/MySqlExpression.cs | 7 +++---- Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs | 1 - Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs | 1 - .../FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs | 7 +++---- .../FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs | 3 +-- .../PostgreSQL/OdbcPostgreSQLExpression.cs | 5 ++--- .../SqlServer/OdbcSqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Oracle/OracleExpression.cs | 3 +-- .../FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs | 5 ++--- Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs | 1 - Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs | 1 - .../FreeSql.Provider.SqlServer/SqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs | 1 - Providers/FreeSql.Provider.Xugu/XuguExpression.cs | 1 - 27 files changed, 23 insertions(+), 50 deletions(-) diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs index cf6e896e4..d66028146 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs @@ -461,7 +461,6 @@ namespace FreeSql.ClickHouse switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"dateDiff(second, {args1}, toDateTime({left}))"; - case "System.TimeSpan": return $"addSeconds(toDateTime({left}),(({args1})*-1))"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs index 4847109fb..add3b7643 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs @@ -150,7 +150,6 @@ namespace FreeSql.Custom public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})"; public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})"; public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})"; - public virtual string LambdaDateTime_SubtractTimeSpan(string operand, string value) => $"dateadd(second, ({value})*-1, {operand})"; public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})"; public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})"; public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)"; diff --git a/Providers/FreeSql.Provider.Custom/CustomExpression.cs b/Providers/FreeSql.Provider.Custom/CustomExpression.cs index 8417152c7..66f2c4320 100644 --- a/Providers/FreeSql.Provider.Custom/CustomExpression.cs +++ b/Providers/FreeSql.Provider.Custom/CustomExpression.cs @@ -365,7 +365,6 @@ namespace FreeSql.Custom switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1); - case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1); } break; case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1); diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs index 415431477..702301d96 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs @@ -217,7 +217,7 @@ namespace FreeSql.Custom.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -417,12 +417,11 @@ namespace FreeSql.Custom.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs index bbd85d90c..90821040d 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Custom.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs index 345800885..eac9daef5 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs @@ -305,7 +305,7 @@ namespace FreeSql.Custom.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -511,8 +511,7 @@ namespace FreeSql.Custom.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs index 4b8d8358d..c9a37d419 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs @@ -420,7 +420,6 @@ namespace FreeSql.Custom.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 31a537569..8e2dbf577 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Dameng case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(cast({left} as timestamp with time zone)-{args1})"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((cast({left} as timestamp with time zone)-{args1})*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs index abcc9cb34..29b978781 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs @@ -488,8 +488,7 @@ namespace FreeSql.Duckdb case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"cast((epoch({left})-epoch({args1}))||' seconds' as interval)"; - case "System.TimeSpan": return $"date_add({left},{args1})"; + case "System.DateTime": return $"(epoch({left})-epoch({args1}))"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 547a5167d..59a4f1780 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -408,7 +408,6 @@ namespace FreeSql.Firebird switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second from {left} to {args1})"; - case "System.TimeSpan": return $"dateadd(({args1})*-1 second to {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs index 2474701e1..573858421 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs @@ -407,8 +407,7 @@ namespace FreeSql.GBase case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"({left} - {args1})"; - case "System.TimeSpan": return $"({left} - {args1})"; + case "System.DateTime": return $"(({left}-{args1})*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs index 9ee054050..d17c761f0 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs @@ -336,7 +336,7 @@ namespace FreeSql.KingbaseES switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -544,8 +544,7 @@ namespace FreeSql.KingbaseES case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index 0b0b3ee4d..e878986c5 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -360,7 +360,6 @@ namespace FreeSql.MsAccess switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('s', {args1}, {left})"; - case "System.TimeSpan": return $"dateadd('s', ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 289ff2187..4800911d5 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -219,7 +219,7 @@ namespace FreeSql.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -419,12 +419,11 @@ namespace FreeSql.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs index 49f48be5a..67538feec 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs @@ -150,7 +150,6 @@ namespace FreeSql.Odbc.Default public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})"; public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})"; public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})"; - public virtual string LambdaDateTime_SubtractTimeSpan(string operand, string value) => $"dateadd(second, ({value})*-1, {operand})"; public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})"; public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})"; public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)"; diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs index 0678406f6..8091f1a88 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs @@ -366,7 +366,6 @@ namespace FreeSql.Odbc.Default switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1); - case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1); } break; case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1); diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 6f91eb841..a82cc4bfd 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -217,7 +217,7 @@ namespace FreeSql.Odbc.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -417,12 +417,11 @@ namespace FreeSql.Odbc.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index d06cf0721..dabb589a0 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Odbc.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 4c8abe477..4427a5a46 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -305,7 +305,7 @@ namespace FreeSql.Odbc.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -511,8 +511,7 @@ namespace FreeSql.Odbc.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index db978b32d..6720d1c75 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -420,7 +420,6 @@ namespace FreeSql.Odbc.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 1da65fb41..3d5535f5c 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index cfc84ec79..2e6927321 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -336,7 +336,7 @@ namespace FreeSql.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -542,8 +542,7 @@ namespace FreeSql.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs index ce3cd9c42..f1d85ec43 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs @@ -456,7 +456,6 @@ namespace FreeSql.QuestDb switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('s',{args1},{left})"; - case "System.TimeSpan": return $"dateadd('s',({args1})*-1,{left})"; } break; case "Equals": return $"({left} = cast({args1} as timestamp))"; diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index a1cec6aa8..26b22e3d6 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -467,7 +467,6 @@ namespace FreeSql.ShenTong switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('second',{args1},{left})"; - case "System.TimeSpan": return $"dateadd('second',({args1})*-1,{left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index 72fdd1df4..97c47b8dc 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -419,7 +419,6 @@ namespace FreeSql.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index f07b91d16..5c300c78f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -435,7 +435,6 @@ namespace FreeSql.Sqlite switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"(strftime('%s',{left})-strftime('%s',{args1}))"; - case "System.TimeSpan": return $"datetime({left},(({args1})*-1)||' seconds')"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs index 070fde1c1..ed2a4b12d 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs @@ -468,7 +468,6 @@ namespace FreeSql.Xugu switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})";