更新数据按照日期筛选不准确 返回

SqlSugar 老数据
8 4130
该叫什么 byron 发布于2017/11/27
悬赏:5 飞吻

代码如下:

image.png

这段代码功能:查询昨天的数据并更新。


目前的遇到的问题是,CreateTime为前天(前天CreateTime+24>当前时间-24)的数据也被更新掉了,括号里是我总结的规律。


猜测,肯定是sugarsql转换成sql的时候,时间查询条件转换有出入导致的。


求解,能否有大神知道日期转换是什么规则?

热忱回答8

  • 是哪个库啊 ,SqlSever生成的SQL是 (DATEDIFF(day,时间1,时间2)=0) 



    db.Updateable().xxx.Sql() 可以查看SQL

    0 回复
  • byron byron VIP0
    2017/11/27

    @fate stay night:是Mysql,哦哦,那我先打印出sql语句看看哈。

    0 回复
  • byron 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 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 回复
  • datetime.now.date 加上date就行了

    0 回复
  • byron byron VIP0
    2017/11/29

    image.png

    是的,这也不失为一种解决办法。

    但是我认为SqlFunc.DateIsSame这个函数(源码如下)有误导人的嫌疑。或者这个函数的注释应该修改一下,因为一般人都会认为传入两个DateTime就自动比较Date了。

    image.png


    感谢非常及时的指导我,由衷希望社区越来越壮大!

    0 回复
  • byron byron VIP0
    2017/11/30

    @byron

    按照这种写法SqlFunc.DateIsSame(i.CreateTime.Date,DateTime.Today.AddDays(-1))报错:

    image.png

    0 回复
  • @byron:下个版本号会解决这些问题

    0 回复