- 优化 DateTime.Subtract 统一得到秒差值;

This commit is contained in:
2881099
2024-11-01 22:16:54 +08:00
parent 1f855de7ff
commit 50919bbbf6
27 changed files with 23 additions and 50 deletions

View File

@@ -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)";

View File

@@ -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);

View File

@@ -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)

View File

@@ -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})";

View File

@@ -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)";

View File

@@ -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})";