时间筛选条件,出现时间格式不匹配的错误

378 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天。

列表查询设置时间筛选条件时,出现时间格式不匹配的错误

前端设置

确定查询的时间段后,点击查询,就会对数据库中的msgTime属性进行筛选

1.png

控制台错误代码打印:

2.png

出现在sphfMessage这个文件的messageEndDate这个字段

3.png

因为我在sphfMessage这个实体类中定义的就是Date类型的数据,(messageSatrtDate出现同样问题已解决)

@Transient
private String messageStartDate; //消息开始时间@Transient
private Date messageEndDate; //消息结束时间

解决问题第一步:将实体类里的对象属性改成String类型

这时候上边的错误消息,转而出现的是:

ORA-01861: 文字与格式字符串不匹配

问题分析:在数据库中msgTime这个属性,建表时定义的就是Date类型,那现在这个查询传值传的是个String类型的数据,肯定会报错。

解决:要解决这个问题,肯定是要将传值传过来的String类型的查询数据,转换成Date类型,作为一个”百度“程序远,百度了一下,知道了,字符类型,转换成date用到了to_Date()这个方法,

原sql语句:

AND dsm.MSG_TIME <= #{messageEndDate} + 1

改成

AND dsm.MSG_TIME &lt;= to_date(#{messageEndDate},'yyyy-MM-dd HH:mm:ss') + 1

出现新问题:

ORA-01810:格式代码出现两次

问题分析

继续百度了一下,这个错误提示明显时指出格式化字符串重复了两次,在Oracle里不应该将某个属性的格式,格式化两次,否则Oracle就不知道要从哪里去解析该字段。

解决办法

在sql中不区分大小写,MM和mi被认为相同的格式代码,所以Oracle的sql采用mi代替分钟

AND dsm.MSG_TIME &lt;= to_date(#{messageEndDate},'yyyy-MM-dd HH:mi:ss') + 1

问题成功解决