복붙노트

[SQL] 날짜 오라클 SQL의 비교는 잘못된 결과를 반환

SQL

날짜 오라클 SQL의 비교는 잘못된 결과를 반환

나는 데이터베이스 (DATETIME) 유형 REPORTDATE 열 수 있습니다. 나는 DATETIME에서만 DATE 값을 추출하기 위해 다음 매일 COUNT을하고 절 나중에 일부 특정 날짜보다 날짜 만 제한하는 WHERE 넣고 싶다.

나는이 절을 가지고 그래서 :

SELECT to_char(REPORTDATE, 'DD.MM.YYYY') AS MY, COUNT(*) from INCIDENT
where to_char(REPORTDATE, 'DD.MM.YYYY')>'09.11.2013'

GROUP BY to_char(REPORTDATE, 'DD.MM.YYYY')

잘못된 결과입니다 2013년 10월 30일 : 그것은 나를하지만 결과지만 같은 잘못된 결과를 알 수 있습니다 반환합니다.

이 문제를 어떻게 해결?

해결법

  1. ==============================

    1.당신은 두 개의 문자열을 비교한다. 당신은 날짜를 비교해야합니다. 이미 여기에 다른 대답에 말했듯이 날짜 계산이다, 당신은 날짜를 떠날 필요가있다. TO_CHAR는 표시이며, TO_DATE은 날짜에 문자열 리터럴을 변환하는 것입니다.

    당신은 두 개의 문자열을 비교한다. 당신은 날짜를 비교해야합니다. 이미 여기에 다른 대답에 말했듯이 날짜 계산이다, 당신은 날짜를 떠날 필요가있다. TO_CHAR는 표시이며, TO_DATE은 날짜에 문자열 리터럴을 변환하는 것입니다.

    SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
      COUNT(*)
    FROM TABLE
    WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
    GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY') 
    

    또한 REPORTDATE 그러므로 그 날짜 요소가되며, 날짜 열이다. 당신이 비교하는 동안 시간 요소를 제외 할 경우에 따라서, 당신은 TRUNC를 사용할 필요가

    WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')
    

    그러나, 날짜 열을 TRUNC을 적용하면 해당 컬럼에 정규 인덱스를 억제한다. 보기의 성능 관점에서 더 나은 날짜 범위 조건을 사용합니다.

    예를 들어,

    WHERE REPORTDATE
    BETWEEN 
            TO_DATE('09.11.2013', 'DD.MM.YYYY')
    AND     
            TO_DATE('09.11.2013', 'DD.MM.YYYY') +1
    
  2. ==============================

    2.문자열 비교 조건 TO_CHAR (REPORTDATE 'DD.MM.YYYY')> '2013년 9월 11일'는 너무 2013년 10월 30일는 2013년 9월 11일 후이다. 당신이 다음에 쿼리를 변경해야합니다, 그래서 당신은 날짜가 아닌 문자열 값을 비교해야합니다.

    문자열 비교 조건 TO_CHAR (REPORTDATE 'DD.MM.YYYY')> '2013년 9월 11일'는 너무 2013년 10월 30일는 2013년 9월 11일 후이다. 당신이 다음에 쿼리를 변경해야합니다, 그래서 당신은 날짜가 아닌 문자열 값을 비교해야합니다.

    SELECT to_char(REPORTDATE, 'DD.MM.YYYY') AS MY, COUNT(1) 
    from INCIDENT
    where trunc(REPORTDATE)> to_date('09.11.2013', 'DD.MM.YYYY')
    GROUP BY to_char(REPORTDATE, 'DD.MM.YYYY')
    

    주 : I 최적화에 대해 동일한 결과를 갖는 쿼리를 카운트에서 약간 변형 (*) 셀 (1)을 첨가.

  3. from https://stackoverflow.com/questions/29005398/oracle-sql-comparison-of-dates-returns-wrong-result by cc-by-sa and MIT license