【问题标题】:Error in Oracle TO_CHAR() FunctionOracle TO_CHAR() 函数中的错误
【发布时间】:2009-11-10 16:50:53
【问题描述】:

为什么下面查询的第7行会出现如下错误?

Error: ORA-01861: literal does not match format string

Query:

01: SELECT hour
02: FROM (WITH all_hours AS
03:             (SELECT TO_DATE ('2000-01-01', 'yyyy-mm-dd') 
04:                      + NUMTODSINTERVAL (LEVEL - 1, 'hour') hour
05:              FROM DUAL
06:              CONNECT BY LEVEL <= 1000000)
07:      SELECT TO_CHAR (h.hour, 'yyyy-mm-dd hh:mi am') hour
08:      FROM all_hours h
09:      GROUP BY h.hour)
10: WHERE hour BETWEEN TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')
11:                AND TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')

【问题讨论】:

  • 日期的时间部分对您的工作很重要吗?

标签: oracle to-char ora-01861


【解决方案1】:

好吧,它不在第 7 行。问题是“小时”在某种程度上被转换为字符串 (to_char),但之后与日期进行比较,并且隐式转换并不总是有效。更正查询:

SELECT hour
FROM (WITH all_hours AS
            (
            SELECT TO_DATE ('2000-01-01', 'yyyy-mm-dd') 
                     + NUMTODSINTERVAL (LEVEL - 1, 'hour') hour
             FROM DUAL
             CONNECT BY LEVEL <= 1000000
             )
     SELECT TO_CHAR (h.hour, 'yyyy-mm-dd hh:mi am') hour, h.hour as hourdate
     FROM all_hours h
     GROUP BY h.hour)
WHERE hourdate BETWEEN TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')
               AND TO_DATE ('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')

【讨论】:

    【解决方案2】:

    您正在将 DATE 与 WHERE 子句中的 CHAR 进行比较。这应该有效:

    SQL> SELECT TO_CHAR(hour, 'yyyy-mm-dd hh:mi am')
      2    FROM (WITH all_hours AS (SELECT TO_DATE('2000-01-01', 'yyyy-mm-dd')
      3                              + NUMTODSINTERVAL(LEVEL - 1, 'hour') hour
      4                               FROM DUAL
      5                             CONNECT BY LEVEL <= 1000000)
      6          SELECT hour FROM all_hours h GROUP BY h.hour)
      7   WHERE hour BETWEEN TO_DATE('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')
      8          AND TO_DATE('2009-11-10 01:00 am', 'yyyy-mm-dd hh:mi am')
      9  ;
    
    TO_CHAR(HOUR,'YYYY-MM-DDHH:MIA
    ------------------------------
    2009-11-10 01:00 am
    

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2018-12-24
      • 2013-10-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多