最近遇到一个日期查询问题,不考虑时间,只查询某一天的数据,所以需要使用时间格式‘YYYY-MM-DD’来进行格式转化
1.tochar使用方式
select to_char(sysdate,'YYYY-MM-DD') from dual
这种方式有利于查询当天的数据,非常方便
select * from TBALENAME(自己的表名) where tochar(date(字段名),'YYYY-MM-DD') = tochar(sysdate,'YYYY-MM-DD')
2.tochar遇到的问题
当我想查询其他日期时,写了这么一个sql语句
select * from TBALENAME(自己的表名) where tochar(date(字段名),'YYYY-MM-DD') = tochar('2021-11-03','YYYY-MM-DD')
哦豁,报错
在这里,聪明的孩子应该已经看到错误了,但是呢,我不是聪明的孩子。o(╥﹏╥)o
有人会问了,为什么to_date来查,因为有的数据日期格式带有时间,不方便查询某一天的数据。
3.找错误
我从网上看了有关 to_char的相关资料
附上链接:https://blog.csdn.net/qichangjian/article/details/88391761
没错,将日期转换为字符类型,而我传的却是字符串,所以就会报错
4.解决
①使用to_date将‘2021-11-03’先转换为日期类型,再使用to_char转为字符类型
select to_char(to_date('2021-11-04','YYYY-MM-DD'),'YYYY-MM-DD') from dual
②一般来讲,后端关于时间的属性都定义为日期类型,比如Timestamp,所以就算你测试时传入字符串也会自动转换为时间类型,所以也可以直接使用to_char进行直接转化,但是传入字符串的格式必须带有时间,比如:‘2021-11-04 00:00:00’
附上一段查询代码供参考
TO_CHAR(PLAN_DATE,'YYYY-MM-DD') = TO_CHAR(#{condDto.searchDate},'YYYY-MM-DD')