更新数据按照日期筛选不准确 返回
代码如下:

这段代码功能:查询昨天的数据并更新。
目前的遇到的问题是,CreateTime为前天(前天CreateTime+24>当前时间-24)的数据也被更新掉了,括号里是我总结的规律。
猜测,肯定是sugarsql转换成sql的时候,时间查询条件转换有出入导致的。
求解,能否有大神知道日期转换是什么规则?
热忱回答(8)
-
fate stay night VIP0
2017/11/27是哪个库啊 ,SqlSever生成的SQL是 (DATEDIFF(day,时间1,时间2)=0)
db.Updateable().xxx.Sql() 可以查看SQL
0 回复 -
byron VIP0
2017/11/27@fate stay night:是Mysql,哦哦,那我先打印出sql语句看看哈。
0 回复 -
byron VIP0
2017/11/27@fate stay night:
转换成的sql语句:[UPDATE `t_redpacket_order_info` SET
`IsGrad` = @Const0 , `Amount` = @Const1 , `UpdateTime` = @constant2 , `Remark` = @Const3 WHERE (((TIMESTAMPDIFF(day,`CreateTime`, (DATE_ADD(@MethodConst5 , INTERVAL @MethodConst6 Day)) )=0) AND( `DeviceNo` = @DeviceNo7 )) AND ( `IsGrad` = @IsGotten8 )), System.Collections.Generic.List`1[SqlSugar.SugarParameter]]。
那么我觉得是转换这块的问题了,SqlFun.DateIsSame转换后交给mysql函数处理就会导致出现匹配结果不准确。
0 回复 -
byron VIP0
2017/11/27@fate stay night:
select TIMESTAMPDIFF(day,'2017-11-25 23:17:43', '2017/11/26 15:33:34' );//0 select TIMESTAMPDIFF(day,'2017-11-26 23:11:45', '2017/11/26 15:33:34' );//0
TIMESTAMPDIFF函数返回的整数差导致的这个问题,这就解释了为什么会把前天的数据也查出来。
希望可以改进一下哈!
0 回复 -
fate stay night VIP0
2017/11/27datetime.now.date 加上date就行了
0 回复 -
byron VIP0
2017/11/29
是的,这也不失为一种解决办法。
但是我认为SqlFunc.DateIsSame这个函数(源码如下)有误导人的嫌疑。或者这个函数的注释应该修改一下,因为一般人都会认为传入两个DateTime就自动比较Date了。

感谢非常及时的指导我,由衷希望社区越来越壮大!
0 回复 -
byron VIP0
2017/11/30@byron:
按照这种写法SqlFunc.DateIsSame(i.CreateTime.Date,DateTime.Today.AddDays(-1))报错:
0 回复 -
fate stay night VIP0
2017/12/1@byron:下个版本号会解决这些问题
0 回复