[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.당신은 두 개의 문자열을 비교한다. 당신은 날짜를 비교해야합니다. 이미 여기에 다른 대답에 말했듯이 날짜 계산이다, 당신은 날짜를 떠날 필요가있다. 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.문자열 비교 조건 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)을 첨가.
from https://stackoverflow.com/questions/29005398/oracle-sql-comparison-of-dates-returns-wrong-result by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리 이전 행 최적화 (0) | 2020.07.15 |
---|---|
[SQL] SQLite는 오류 빈 테이블에 삽입 할 때의 '열 _id가 고유하지 않습니다' (0) | 2020.07.15 |
[SQL] LINQ는 (SQL) LIKE 범위 검색을 만들려면 (0) | 2020.07.15 |
[SQL] 어떻게 created_at 및 하이브에서 타임 스탬프 updated_at를 기록하는? (0) | 2020.07.15 |
[SQL] 자바 : 왜 ResultSet의 직렬화하지? (0) | 2020.07.15 |