gpt4 book ai didi

sql - Oracle TO_DATE 不抛出错误

转载 作者:行者123 更新时间:2023-12-03 20:08:36 27 4
gpt4 key购买 nike

我刚刚发现了 oracle 的奇怪行为 TO_DATEformat_mask 一起使用时的功能范围。

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

示例一 预期行为 - 抛出错误:

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

ORA-01843: not a valid month



示例二 意外行为 - 解析日期:
SELECT TO_DATE('18-feb-2016', 'DD/MM/YYYY') FROM dual

February, 18 2016 00:00:00



我在文档中看不到任何评论,所以我想知道这种不合理是设计使然还是错误,或者我可能没有理解正确的东西?

编辑:
查看答案,我同意这很可能是设计使然。但是这里所做的事情在我看来是危险的“自动”。

如果格式将被错误解释(由 oracle 猜测)怎么办?是否有任何文件说明这里究竟发生了什么,所以我可以确定它是安全的?

我的问题是——我可以关掉它吗?我唯一的选择是自己验证格式吗?

最佳答案

请参阅此处的表格:https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#g195479

它是日期时间格式模型的字符串到日期转换规则部分的一部分。在MM的情况下如果没有匹配,它会尝试 MONMONTH .同样,如果您指定 MON它没有找到,它尝试 MONTH .如果您指定 MONTH它找不到,它尝试 MON ,但它永远不会尝试 MM除了 MM .

回答问题:Can I turn it off?答案是,是的。

您可以通过指定 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 时你 必须使用正确的分隔符,否则会出错。

关于sql - Oracle TO_DATE 不抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com