一、MySQL版本
前端使用element-ui的时间段组件el-date-picker
<el-date-picker size="small" value-format="yyyy-MM-dd"
v-model="dateline" type="daterange" unlink-panels range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期"
:picker-options="pickerOptions">
</el-date-picker>
前端传入参数startDate,endDate
Java的xml进行时间日期的格式化,然后在进行比较,因为我们前端选择的类型是yyyy-MM-dd(年月日)所有需要我们进行类型转换,把yyyy-MM-dd HH:mm:ss的时间字段转换为一致的类型进行比较。
<where>
<if test="startDate != null ">
and DATE_FORMAT(stime, '%Y-%m-%d') <![CDATA[>=]]> #{startDate}
</if>
<if test="endDate != null ">
and DATE_FORMAT(stime, '%Y-%m-%d') <![CDATA[<=]]> #{endDate}
</if>
</where>
二、PostgreSQL版本
PostgreSQL日期类型使用的是timestamp,因此转换日期的函数需要改变;当然不只是这一种方法,不过我懒就没去找了~~~
<where>
<if test="startDate != null ">
and to_date(to_char(stime,'yyyy-MM-dd'),'yyyy-MM-dd') <![CDATA[>=]]> #{startDate} </if>
<if test="endDate != null ">
and to_date(to_char(stime,'yyyy-MM-dd'),'yyyy-MM-dd') <![CDATA[<=]]> #{endDate}
</if>
</where>
三、出现的错误
类型转换错误:一般前端传入后端的参数都是string类型然后经过json格式化传入后端解析接收,因此如果需要接收日期类型参数,需要进行yml的配置,不然会报错类型错误
Cannot deserialize value of type java.sql.date from String “2023-05-01”: not a valid representation (error: Failed to parse String value ‘2023-05-01’: Unparseable String: “2023-05-01”)
大致意思就是Date的类型字段无法接收String类型的参数
解决方案:
1.yml配置
# yml配置时区,日期格式
spring
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
2.字段进行类型转换注解
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
这样就可以解析到String类型转换为我们需要的时间格式了。