Oracle 中 日期格式的问题 返回

SqlSugar 老数据
7 1050

在orm中查询条件带有日期时,输出的sql语句无法在oracle中执行,报

ORA-01843: 无效的月份

但是orm中有查询结果。

热忱回答7

  • fate sta fate sta VIP0
    2021/12/25

    提供具体用例

    0 回复
  • BrainK BrainK VIP0
    2021/12/25

    @fate sta

    var dbTime = DateTime.Parse("2021-12-20 09:03:19");
    var query1 = BaseDal.Db.Queryable<TestEntity>().Any(it => it.UpdateTime == dbTime); // true
    var query2 = BaseDal.Db.Queryable<TestEntity>().Where(it => it.UpdateTime == dbTime).ToList(); // query2.count = 1

    输出的sql

    SELECT * FROM (SELECT 1,ROW_NUMBER() OVER(ORDER BY sysdate ) AS RowIndex  FROM "TEST"  WHERE ( "UPDATE_TIME" = '2021/12/20 9:03:19' )) T WHERE RowIndex BETWEEN 1 AND 1
    
    SELECT * FROM "TEST"  WHERE ( "UPDATE_TIME" = '2021/12/20 9:03:19' )

    ORA-01843: 无效的月份

    0 回复
  • BrainK BrainK VIP0
    2021/12/25

    @fate sta


    var datelist =new List<DateTime> {
                        DateTime.Parse("2021-12-20 09:03:19"),
                        DateTime.Parse("2021-12-20 09:03:19"),
                        DateTime.Parse("2021-12-20 09:03:19")
                    };
    
    var query = BaseDal.Db.Queryable<TestEntity>().Any(it => datelist.Contains(it.UpdateTime)); // ORA-01843: 无效的月份

    无结果

    SQL

    SELECT * FROM (SELECT 1,ROW_NUMBER() OVER(ORDER BY sysdate ) AS RowIndex  FROM "TEST"  WHERE  ("UPDATE_TIME" IN ('2021/12/20 9:03:19','2021/12/20 9:03:19','2021/12/20 9:03:19')) ) T WHERE RowIndex BETWEEN 1 AND 1


    0 回复
  • fate sta fate sta VIP0
    2021/12/25

    SqlFunc.ContainsArrayUseSqlParameters  用这个函数

    0 回复
  • BrainK BrainK VIP0
    2021/12/25

    @fate sta:请问上面的那个是什么情况?

    为何输出的sql无法执行但是实际上查到呢?

    0 回复
  • fate sta fate sta VIP0
    2021/12/25

    @BrainK:应该是服务器的时间格字段不匹配,改用参数化就没这些问题

    0 回复
  • fate sta fate sta VIP0
    2021/12/25

    像时间这种IN最好参数化 ,字符串很保证精度

    0 回复