mybatis日期查询的坑:具体查询某一天的数据,数据库中能查询到结果,但是mybatis中却查询不到

关于日期查询,今天遇到个坑:

就是我用 date_format 函数来查询某个时间段的数据,无论是数据库还是mybatis都可以查询,都没问题 ;

但是我如果要精确查询某一天的数据,在数据库中查询没有问题,但是在mybatis中却查不到,我把控制台的sql语句复制到数据库中执行都能查询到数据。

详细情况如下:

一、查询某个时间段的数据:

AND date_format(start_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
AND date_format(end_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d')

用 date_format,然后大于等于或者小于等于,也可以用 between 。这里无论是在mybatis中还是在sql中查询都没有问题。

二、查询具体某一天的数据:

AND date_format(start_time,'%y%m%d') = date_format(#{startTime},'%y%m%d')
AND date_format(end_time,'%y%m%d') = date_format(#{endTime},'%y%m%d')

而这里,在mybatis中死活查询不到数据,我把控制台的sql语句复制到数据库中去执行都可以查询字段也反复检查了没有问题,可在mybatis中就是查不到。

在这里插入图片描述
上图很明显,已经把日期传过来了;也不是后面时分秒的原因,因为我在数据库中执行这句sql,把日期值设置成精确到时分秒,也是可以查询到数据的,如下:

date_format(start_time,'%y%m%d') >= date_format('2021-02-11 00:00:00.0','%y%m%d')

但偏偏mybatis就是查不到,后面我有试过把date_format换成to_days()函数,还是一样,sql执行没问题,mybatis中执行查不到数据。就挺离谱的,一直想不通是哪里的问题。

三、解决

然后我换了一种方法查询,使用DATE_SUB和DATE_ADD函数,如下:

AND (#{startTime} >date_sub(start_time, INTERVAL 1 DAY)
	and date_add(start_time,interval 1 day) > #{startTime})
	
AND (#{endTime} >date_sub(end_time, INTERVAL 1 DAY)
	and date_add(end_time,interval 1 day) > #{endTime})

date_sub 减一天
date_add 加一天

比如:

AND ('2021-02-11' >date_sub(start_time, INTERVAL 1 DAY)
	and date_add(start_time,interval 1 day) > '2021-02-11'

这里总算可以查出来了,无论是在sql还是mybatis都可以查询出数据。

以上,太坑了,不知道为什么会有这种情况,百度了半天大部分都是说数据库连错了或者字段错了,就离谱,如果数据库连错了或字段错了,控制台不直接报错?这样我也用不着在网上找半天了。

2022-11-08更新

好像是时区的问题,连接数据库配置时区的时候,没有和系统时区保持一致。
在这里插入图片描述
系统时区是北京时间,然后配置文件设置的是 serverTimezone=UTC。。。难怪,然后我看了下为什么是设置的这个时区,因为我的yml配置文件有五个:
在这里插入图片描述
我只在第一个配置文件里设置的时区是和系统时区对的上的:serverTimezone=GMT%2B8 ,其他几个配置的时区都没改,都是是 serverTimezone=UTC 。难怪了。。。淦,我自己的问题。因为这个项目是很久很久以前的了,要不是看了评论,我都一直不知道是怎么回事。怪我自己太菜了😑

  • 5
    点赞
  • 16
    收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 11

打赏作者

符华-

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值