diff --git a/Src/Asp.Net/OracleTest/Demo/Demo1_Queryable.cs b/Src/Asp.Net/OracleTest/Demo/Demo1_Queryable.cs index 86bd28d8d..a733075a1 100644 --- a/Src/Asp.Net/OracleTest/Demo/Demo1_Queryable.cs +++ b/Src/Asp.Net/OracleTest/Demo/Demo1_Queryable.cs @@ -53,6 +53,14 @@ namespace OrmTest ).ToList(); var test2 = db.Queryable().Select().ToList(); var test3 = db.Queryable().Select(it=>new Order() { CreateTime=SqlFunc.GetDate() }).ToList(); + var btime = Convert.ToDateTime("2021-2-1"); + var etime = Convert.ToDateTime("2022-1-12"); + var test01 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Year, btime, etime)).ToList(); + var test02 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Day, btime, etime)).ToList(); + var test03 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Month, btime, etime)).ToList(); + var test04 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Second, DateTime.Now, DateTime.Now.AddMinutes(2))).ToList(); + var test05 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Minute, DateTime.Now, DateTime.Now.AddMinutes(21))).ToList(); + var test06 = db.Queryable().Select(it => SqlFunc.DateDiff(DateType.Hour, DateTime.Now, DateTime.Now.AddHours(3))).ToList(); Console.WriteLine("#### Examples End ####"); } diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs index 18049ff6b..e5891bd7b 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs @@ -53,6 +53,33 @@ namespace SqlSugar } public partial class OracleMethod : DefaultDbMethod, IDbMethods { + + public override string DateDiff(MethodCallExpressionModel model) + { + var parameter = (DateType)(Enum.Parse(typeof(DateType), model.Args[0].MemberValue.ObjToString())); + var begin = model.Args[1].MemberName; + var end = model.Args[2].MemberName; + switch (parameter) + { + case DateType.Year: + return $" ( cast((months_between( {end} , {begin}))/12 as number(9,0) ) )"; + case DateType.Month: + return $" ( cast((months_between( {end} , {begin})) as number(9,0) ) )"; + case DateType.Day: + return $" ( ROUND(TO_NUMBER({end} - {begin})) )"; + case DateType.Hour: + return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24) )"; + case DateType.Minute: + return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60) )"; + case DateType.Second: + return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60 * 60) )"; + case DateType.Millisecond: + return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60 * 60 * 60) )"; + default: + break; + } + throw new Exception(parameter + " datediff no support"); + } private void PageEach(IEnumerable pageItems, int pageSize, Action> action) { if (pageItems != null && pageItems.Any())