Oracle SQL:如何将'1/15/1976'转为19760115日期并解决ORA-01722错误
修复ORA-01722错误并得到19760115格式日期
嘿,我来帮你搞定这个问题!你遇到的ORA-01722错误,根源在于对to_char和to_date的用法逻辑搞反啦。
错误原因分析
你当前的代码:
SELECT to_date(to_char('1/15/1976','MM/DD/YYYY'), 'YYYYMMDD') FROM DUAL;
这里有两个核心问题:
to_char的第一个参数要求是日期或数字类型,但你传入的是字符串'1/15/1976',Oracle会尝试把这个字符串强制转成数字,显然'1/15/1976'不是合法数字,所以抛出了“invalid number”错误。- 逻辑顺序错误——应该先把字符串解析成日期,再格式化成你想要的样式,而不是反过来操作。
正确的写法
要得到19760115格式的结果,正确的步骤是:
- 用
to_date把输入的字符串'1/15/1976'按照'MM/DD/YYYY'的格式解析为Oracle可识别的日期类型 - 再用
to_char把这个日期类型格式化为'YYYYMMDD'的字符串格式
对应的代码:
SELECT to_char(to_date('1/15/1976','MM/DD/YYYY'), 'YYYYMMDD') FROM DUAL;
执行这个语句就能得到你想要的19760115结果啦。
额外补充
如果你需要的是数字类型的19760115(而不是字符串),可以在外面套一层to_number:
SELECT to_number(to_char(to_date('1/15/1976','MM/DD/YYYY'), 'YYYYMMDD')) FROM DUAL;
内容的提问来源于stack exchange,提问作者SASPYTHON
相关产品推荐
相关产品推荐

