一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天。
列表查询设置时间筛选条件时,出现时间格式不匹配的错误
前端设置
确定查询的时间段后,点击查询,就会对数据库中的msgTime属性进行筛选
控制台错误代码打印:
出现在sphfMessage这个文件的messageEndDate这个字段
因为我在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 <= to_date(#{messageEndDate},'yyyy-MM-dd HH:mm:ss') + 1
出现新问题:
ORA-01810:格式代码出现两次
问题分析:
继续百度了一下,这个错误提示明显时指出格式化字符串重复了两次,在Oracle里不应该将某个属性的格式,格式化两次,否则Oracle就不知道要从哪里去解析该字段。
解决办法
在sql中不区分大小写,MM和mi被认为相同的格式代码,所以Oracle的sql采用mi代替分钟
AND dsm.MSG_TIME <= to_date(#{messageEndDate},'yyyy-MM-dd HH:mi:ss') + 1
问题成功解决