暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记录 to_char引发的ORA-01722: 无效数字 问题

鲁鲁 2025-02-28
118

最近遇到一个日期查询问题,不考虑时间,只查询某一天的数据,所以需要使用时间格式‘YYYY-MM-DD’来进行格式转化

1.tochar使用方式
select to_char(sysdate,'YYYY-MM-DD') from dual
1

这种方式有利于查询当天的数据,非常方便

select * from TBALENAME(自己的表名) where tochar(date(字段名),'YYYY-MM-DD') = tochar(sysdate,'YYYY-MM-DD')
1
2.tochar遇到的问题
当我想查询其他日期时,写了这么一个sql语句

select * from TBALENAME(自己的表名) where tochar(date(字段名),'YYYY-MM-DD') = tochar('2021-11-03','YYYY-MM-DD')
1
哦豁,报错
1

在这里,聪明的孩子应该已经看到错误了,但是呢,我不是聪明的孩子。o(╥﹏╥)o
有人会问了,为什么to_date来查,因为有的数据日期格式带有时间,不方便查询某一天的数据。
3.找错误
我从网上看了有关 to_char的相关资料

附上链接:https://blog.csdn.net/qichangjian/article/details/88391761
没错,将日期转换为字符类型,而我传的却是字符串,所以就会报错
4.解决
①使用to_date将‘2021-11-03’先转换为日期类型,再使用to_char转为字符类型

select to_char(to_date('2021-11-04','YYYY-MM-DD'),'YYYY-MM-DD') from dual
1

②一般来讲,后端关于时间的属性都定义为日期类型,比如Timestamp,所以就算你测试时传入字符串也会自动转换为时间类型,所以也可以直接使用to_char进行直接转化,但是传入字符串的格式必须带有时间,比如:‘2021-11-04 00:00:00’
附上一段查询代码供参考

TO_CHAR(PLAN_DATE,'YYYY-MM-DD') = TO_CHAR(#{condDto.searchDate},'YYYY-MM-DD')
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_40788998/article/details/121135689

文章转载自鲁鲁,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论