sql 时间参数 对比

389 阅读1分钟

起因

项目需要,查询返回创建日期区间的数据

前端传值 2021-06-08

后台接收 Date类型

经过

1 xml中判断为空 startDate!= null and startDate!= '' 会报错 因为 !='' 是String类型的判断,而接受时间参数用的Date类型, 删掉startDate!= ''判断即可

2 因为是取区间的数据,类似于 created_date>= 2021-06-08 或者 created_date<= 2021-06-08,当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序错误。

原符号<<=>=&'"
替换符号<<=>=&'"

两个区间数据相同时取不到数据 即 created_date >= 2021-06-08 and created_date <= 2021-06-08

仔细检查发现是因为格式化的问题数据库中的created_date数据存的是yyyy-mm-dd hh-MM-ss 格式的

所以传进来的 2021-06-08 会被默认为是 2021-06-08 00:00:00的,所以要改变格式:

3.1 方法一 : 从xml中修改

<if test="startDate != null">
      and to_date(to_char(created_date,'yyyy-mm-dd'),'yyyy-mm-dd') &gt;= to_date(to_char(#{startDate},'yyyy-mm-dd'),'yyyy-mm-dd')
</if>
<if test="endDate != null">
       and to_date(to_char(created_date,'yyyy-mm-dd'),'yyyy-mm-dd') &lt;= to_date(to_char(#{endDate},'yyyy-mm-dd'),'yyyy-mm-dd')
        </if>

3.2 方法二: 自己后台设置格式为自己项目需要的类型 如 yyyy-mm-dd 或 yyyy-mm-dd hh-MM-ss