【问题标题】: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 函数中使用正确的日期掩码。

标签: sql oracle date toad


【解决方案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 服务器一样。
    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多