【发布时间】:2016-04-17 02:28:08
【问题描述】:
我刚刚发现 oracle TO_DATE 函数与 format_mask 参数一起使用时的奇怪行为。
基本上,我看到的是,在一种情况下,它会忽略给定的格式掩码,并使用自己的掩码解析输入,而在其他情况下,它会引发异常。
示例 I 预期行为 - 抛出错误:
SELECT TO_DATE('18-02-2016', 'DD/MON/YYYY') FROM dual
ORA-01843: 月份无效
示例 II 意外行为 - 解析日期:
SELECT TO_DATE('18-feb-2016', 'DD/MM/YYYY') FROM dual
2016 年 2 月 18 日 00:00:00
我在文档中看不到这方面的任何评论,所以我想知道这种不合时宜的做法是设计使然,还是错误,或者我没有理解正确的东西?
编辑: 查看答案,我同意这很可能是设计使然。但是这里所做的对我来说看起来危险地“自动”。
如果格式将被错误地解释(被 oracle 猜测)怎么办?有没有关于这里到底发生了什么的文档,所以我可以确定它是安全的?
我的问题是——我可以把它关掉吗?我唯一的选择是自己验证格式吗?
【问题讨论】:
-
我冒昧地运行了 sn-ps 并编辑了问题以包含实际输出。我认为您得到“ORA-01843:不是有效月份”而不是“ORA-01830:日期格式图片在转换整个输入字符串之前结束”或其他内容可能相关。