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 期望啥日期格式?的主要内容,如果未能解决你的问题,请参考以下文章