用时间类型字段作导航关联,查询会报Incorrect DATETIME value: '07/01/2024 00:00 返回

SqlSugar 处理完成
25 211

我有两个表,一个排班表,一个假期表

我用排班表的工作日(时间类型),作一个一对一的导航关联,在本地测试运行是正常的,但是发布到docker上运行就报错:
排班表:

image.png

假日表:

image.png


查询:
image.png

报错:

Incorrect DATETIME value: '07/01/2024 00:00:00'


热忱回答25

  • 什么库

    0 回复
  • sqlsugar版本是多少,我记得修复过了

    0 回复
  • 还有另外一个奇怪的点是,即使在docker上,如果我查的是5月的数据,是不会报错的,查询了6月,7月才会报错

    0 回复
  • image.png

    0 回复
  • 查5月正常:
    image.png

    0 回复
  • 查7月报错:
    image.png

    0 回复
  • @梁捷廷

    onerror监控一下报错 sql

    0 回复
  •  Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));


    用这个方法打印出来


    0 回复
  • 还是什么数据库

    0 回复
  • @fate sta


    SELECT * FROM  (SELECT `id`,`staff_id`,`work_date`,`is_rest`,`on_duty_time`,`off_duty_time`,`is_cross_day`,`rest_time_start1`,`rest_time_end1`,`rest_time_start2`,`rest_time_end2`,`rest_time_start3`,`rest_time_end3`,`schedule_hour`,`operator_type`,`created_at`,`create_user_id`,`rest_time_is_cross_day1`,`rest_time_is_cross_day2`,`rest_time_is_cross_day3` FROM `hr_staff_schedule`  WHERE (( `work_date` >= '2024-07-01 00:00:00.000' ) AND ( `work_date` <= '2024-07-31 23:59:59.000' )) ) MergeTable  ORDER BY  `Id` ASC

    0 回复
  • @fate sta:mysql,版本:8.0.36-0ubuntu0.22.04.1

    0 回复
  • @梁捷廷:这个是Docker上运行的输出:

    [Sql]:SELECT * FROM  (SELECT `id`,`staff_id`,`work_date`,`is_rest`,`on_duty_time`,`off_duty_time`,`is_cross_day`,`rest_time_start1`,`rest_time_end1`,`rest_time_start2`,`rest_time_end2`,`rest_time_start3`,`rest_time_end3`,`schedule_hour`,`operator_type`,`created_at`,`create_user_id`,`rest_time_is_cross_day1`,`rest_time_is_cross_day2`,`rest_time_is_cross_day3` FROM `hr_staff_schedule`  WHERE (( `work_date` >= @WorkDate0 ) AND ( `work_date` <= @WorkDate1 )) ) MergeTable  ORDER BY  `Id` ASC   

          [Pars]:

          [Name]:@WorkDate0 [Value]:07/01/2024 00:00:00 [Type]:DateTime    

          [Name]:@WorkDate1 [Value]:07/31/2024 23:59:59 [Type]:DateTime 


    0 回复
  • @梁捷廷: 报错的SQL是这个吗?  要用onerror监控,导航不止一条SQL,这个参数化是没有问题的

    0 回复
  • @fate sta


    [Sql]:SELECT `id` AS `Id`,`holidays_years` AS `HolidaysYears`,`holiday_name` AS `HolidayName`,`holidays` AS `Holidays`,`created_at` AS `CreatedAt`,`create_user_id` AS `CreateUserId` FROM `sys_legal_holidays_record`  WHERE   `holidays` = '07/01/2024 00:00:00'    


    0 回复
  • 为什么在本地调试不会报错,用docker部署就会报错呢?本地调试和docker连的都是同一个数据库哦

    0 回复
  • @梁捷廷:日志搞出来

    0 回复
  • @fate sta:要什么日志

    0 回复
  • @梁捷廷:你只要给我拿出报错SQL就行了,AOP里在的 OnError能捕获错误

    0 回复
  • @梁捷廷:本地执行这个SQL语句的条件就是2024/7/1 0:00:00,到在docker环境就是07/01/2024 00:00:00

    本地:
    image.png

    Docker环境:

    image.png

    0 回复
  • @fate sta:报错的SQL是:
    SELECT `id` AS `Id`,`holidays_years` AS `HolidaysYears`,`holiday_name` AS `HolidayName`,`holidays` AS `Holidays`,`created_at` AS `CreatedAt`,`create_user_id` AS `CreateUserId` FROM `sys_legal_holidays_record`  WHERE   `holidays` = '07/01/2024 00:00:00'

    0 回复
  • 查询5月不报错的SQL语句,看来用”in”查询是可以用这个格式,但是用”=“就会报错:
    SELECT `id` AS `Id`,`holidays_years` AS `HolidaysYears`,`holiday_name` AS `HolidayName`,`holidays` AS `Holidays`,`created_at` AS `CreatedAt`,`create_user_id` AS `CreateUserId` FROM `sys_legal_holidays_record`  WHERE   `holidays` IN ('05/01/2024 00:00:00','05/02/2024 00:00:00','05/03/2024 00:00:00','05/04/2024 00:00:00','05/05/2024 00:00:00','05/06/2024 00:00:00')

    0 回复
  • @梁捷廷:in查询虽然不会报错,但是拿到的结果不对,是查询不到数据的,事实上假日表是有5月1和5月2的数据,但是用这个SQL语句查询不出来,需要是改正确的日期格式才有数据

    0 回复
  • @梁捷廷:这个我看一下,这格式肯定不对

    0 回复
  • SqlSugarCore 5.1.4.158-preview11


    过五分钟后安装一下已修复

    勾一下预览


    0 回复
  • @fate sta:好的,谢谢,可以了

    0 回复