Oracle to_char () 함수의 오류
문제
아래 쿼리 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
제휴하지 않습니다 StackOverflow