sql – Oracle TO_DATE不会抛出错误

前端之家收集整理的这篇文章主要介绍了sql – Oracle TO_DATE不会抛出错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用 format_mask参数时,我刚刚发现oracle TO_DATE功能的好奇行为.

基本上,我看到的是,在一种情况下,它会忽略给定的格式掩码,并使用自己的掩码来解析输入,在其他情况下会抛出异常.

示例我预期的行为 – 抛出的错误

SELECT TO_DATE('18-02-2016','DD/MON/YYYY') FROM dual

ORA-01843: not a valid month

示例II意外行为 – 解析日期:

SELECT TO_DATE('18-feb-2016','DD/MM/YYYY') FROM dual

February,18 2016 00:00:00

我在文档中看不到任何这样的说法,所以我想知道这个incostincency是否是设计的,还是错误的,或者我不明白什么是正确的?

编辑:
看着答案我可以同意,这最有可能是设计.但是,这里所做的工作对我而言是危险的“自动化”.

格式如何解释(oracle猜测)不正确?有没有关于这里正在发生的事情的文件,所以我可以确定它是安全的?

我的问题是 – 我可以把它关掉吗?我唯一的选择是否自行验证格式?

解决方法

见表: https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#g195479

它是日期时间格式模型的字符串日期转换规则部分的一部分.在MM的情况下,如果没有匹配,则尝试MON和MONTH.类似地,如果您指定MON并且没有找到,则尝试MONTH.如果你指定MONTH并且找不到它,它会尝试MON,但是除了MM之外,它不会尝试MM.

回答这个问题:我可以把它关掉吗?答案是,是的.

您可以通过将FX指定为格式化的一部分来实现.

SELECT TO_DATE('18/february/2016','FXDD/MM/YYYY') FROM dual;

现在返回:

[Error] Execution (4: 16): ORA-01858: a non-numeric character was
found where a numeric was expected

而以下内容

SELECT TO_DATE('18/02/2016','FXDD/MM/YYYY') FROM dual;

返回预期:

2/18/2016

请注意,当指定FX时,您必须使用适当的分隔符,否则将会出错.

猜你在找的MsSQL相关文章