質問

なぜ、次のエラーは、以下のクエリの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')
役に立ちましたか?

解決

まあ、それは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')

他のヒント

あなたはWHERE句で文字になるように、日付を比較しています。この作業をする必要があります:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top