Unix环境下SQL ORA-01843无效月份及日期格式转换求助
搞定Oracle日期格式:从DD-MON-YY到DD-MON-YYYY的正确转换
我最近在做视图开发时碰到个棘手的日期显示问题:底层表存的日期字符串格式是DD-MON-YY,但界面要求必须以DD-MON-YYYY的完整年份格式展示,折腾了好一会儿才解决,分享下过程:
- 一开始想当然直接用
to_char(tdj_Tran_dt,'DD-MON-YYYY')转换,结果直接踩坑——比如存储的20-OCT-17居然变成了20-OCT-0017,年份被解析成了0017,完全不是预期的2017。 - 无奈的是系统已经完成数据迁移,没法修改表数据的插入格式,只能在查询层面找解决方案。
- 后来试了嵌套转换的写法:
TO_CHAR(TO_DATE(tdj_tran_dt,'DD-MON-RRRR'),'DD-MON-RRRR'),目前测试下来这个方法完全管用,能正确把两位年份的字符串识别成对应的四位完整年份,比如20-OCT-17会被转换成20-OCT-2017。 - 另外在调试过程中还碰到过
ORA-01843(无效月份)的错误,提醒下大家:这个错误大多是因为日期字符串和指定的格式不匹配,比如如果会话语言不是英文,MON对应的月份缩写就没法被识别,得确保格式里的MON和存储的月份缩写完全对应。
内容的提问来源于stack exchange,提问作者cumberdame
相关产品推荐
相关产品推荐

