Oracle/Toad 期望啥日期格式?

Posted

技术标签:

【中文标题】Oracle/Toad 期望啥日期格式?【英文标题】:What date format does Oracle/Toad expect?Oracle/Toad 期望什么日期格式? 【发布时间】:2012-04-18 19:10:55 【问题描述】:

在 Toad 编辑器中,我有这个 SQL:

SELECT INTERLOPERABCID,AVAILABLEDATE,
AVAILABLEQHR,CARPHONEID,
TRUNC((AVAILABLEQHR-1)/12) "COL",
MOD(AVAILABLEQHR-1,12) "ROW"
FROM ABC.INTERLOPERAVAILABILITY
WHERE INTERLOPERABCID>42
AND AVAILABLEDATE='09/Apr/2012'

...但它不返回任何行,即使我在表中看到许多记录其 AVAILABLEDATE 值 = '4/9/2012'

日期格式('09/Apr/2012';我也试过 '04/Sep/2012')看起来很奇怪,但至少我没有得到任何编译/执行错误。当我尝试“2012 年 4 月 9 日”和“2012 年 4 月 9 日”时,它说“ORA-01853:无效月份”

我必须如何输入日期才能告诉它我想查看 2012 年 4 月 9 日的日期?

【问题讨论】:

日期格式取决于 NLS_DATE_FORMAT 设置,它取决于 NLS_TERRITORY。两者都可以是特定于会话的。永远不要依赖“默认”日期格式,在 to_date 函数中使用正确的日期掩码。 【参考方案1】:

使用 TO_DATE 最安全:

AND AVAILABLEDATE = TO_DATE('09/Apr/2012', 'DD/Mon/YYYY')

【讨论】:

【参考方案2】:

我喜欢使用date literal:

SELECT INTERLOPERABCID,AVAILABLEDATE,
AVAILABLEQHR,CARPHONEID,
TRUNC((AVAILABLEQHR-1)/12) "COL",
MOD(AVAILABLEQHR-1,12) "ROW"
FROM ABC.INTERLOPERAVAILABILITY
WHERE INTERLOPERABCID>42
AND AVAILABLEDATE = DATE '2012-04-09'

您确定您的日期中没有时间部分吗?

【讨论】:

数据类型是“日期”,并且没有时间元素显示在该列的数据库中。 两个答案都有效,所以选择哪一个作为“the”答案是一个折腾。 这很不寻常,您必须在日期前加上 DATE 类型说明符。我从来没有预料到它,因为我认为 oracle 会足够聪明地转换它或像 sql 服务器一样。

以上是关于Oracle/Toad 期望啥日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

dd/mm/yyyy 是啥日期格式?

这是啥日期时间格式以及如何解析它?

这是啥日期时间格式?即:“1551927028”[重复]

日期和时间YYYY–MM–DD是啥格式怎么填写?

400错误代码,路径啥的都没有问题,日期格式也正常转了

ISO 8601 和 RFC 3339 日期格式有啥区别?