解决:ora-01847:月份中日的值必须介于 1 和当月最后一日之间

昨日在处理 oracle 查询sql语句的时候,出现了ora-01847 错误,但奇葩的是,在 idea 中执行该 sql 语句,却不会出现 01847 这个错误,放到程序中运行时,就会出错,这就说明,在 sql 编写上不够严谨,故特意记下了这次解决问题的过程和思路,希望能帮到遇到同样问题的朋友们。

报错原 sql:

SELECT NVL(u.name,' ') name,u.sex,NVL(u.create_time,' ') create_time 
FROM user u
WHERE u.create_time BETWEEN #{beginDate} AND #{endDate}
ORDER BY u.create_time DESC

报错原因在于在 create_time 上使用了nvl函数,create_time 为 date 类型,但是我在 nvl 中,给的却是默认字符,这就导致了 ora-01847 错误。最后解决办法是,将 create_time 转换成字符,保持 nvl 前后数据格式一致,报错就消失了。

解决问题后的 sql:

SELECT NVL(u.name,' ') name,u.sex,NVL(TO_CHAR(u.create_time,'yyyy-MM-dd HH24:mi:ss'),' ') create_time 
FROM user u
WHERE u.create_time BETWEEN #{beginDate} AND #{endDate}
ORDER BY u.create_time DESC

 

如果此篇博文能帮到你,希望你能不吝点赞或评论下~

学无止境,生生不息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值