-
[Oracle] Date 24시간으로 비교하기programming/SQL 2020. 12. 23. 23:00반응형
오라클에서 시간을 비교할 때, 단순히 부등호 만으로 비교할 수 있다.
예를 들어 아래와 같은 테이블이 있을 때,
create TABLE DATE_TEST( SEQ NUMBER, TEXT VARCHAR2(100), REG_DT DATE, MOD_DT DATE ); INSERT INTO DATE_TEST VALUES(1, 'TEST1', TO_DATE('2020-12-23 11:00:00', 'yyyy-MM-dd HH24:MI:SS'), TO_DATE('2020-12-23 11:00:00', 'yyyy-MM-dd HH24:MI:SS')); INSERT INTO DATE_TEST VALUES(2, 'TEST2', TO_DATE('2020-12-23 12:00:00', 'yyyy-MM-dd HH24:MI:SS'), TO_DATE('2020-12-23 12:00:00', 'yyyy-MM-dd HH24:MI:SS')); INSERT INTO DATE_TEST VALUES(3, 'TEST3', TO_DATE('2020-12-23 13:00:00', 'yyyy-MM-dd HH24:MI:SS'), TO_DATE('2020-12-23 13:00:00', 'yyyy-MM-dd HH24:MI:SS')); INSERT INTO DATE_TEST VALUES(4, 'TEST4', TO_DATE('2020-12-23 14:00:00', 'yyyy-MM-dd HH24:MI:SS'), TO_DATE('2020-12-23 14:00:00', 'yyyy-MM-dd HH24:MI:SS')); INSERT INTO DATE_TEST VALUES(5, 'TEST5', TO_DATE('2020-12-23 15:00:00', 'yyyy-MM-dd HH24:MI:SS'), TO_DATE('2020-12-23 15:00:00', 'yyyy-MM-dd HH24:MI:SS'));
SELECT 문을 아래와 같이 작성하면 원하는 결과를 얻을 수 없다.
SELECT * FROM DATE_TEST WHERE TO_CHAR(REG_DT,'yyyy-MM-dd HH') >= '2020-12-23 13';
위 SELECT 문의 의도는 '2020-12-23'일 '13'시 보다 큰, 이후의 시간을 가진 데이터를 조회하고 싶었던 것이다.
하지만 이렇게 조회하면 데이터는 나오지 않는다.
조건문을 빼고 조회하면 멀쩡히 잘 나온다.
SELECT * FROM DATE_TEST;
이런 결과가 나타나는 이유는 24시간 표기를 제대로 체크하지 않았기 때문인데,
이는 TO_CHAR에서 시간 타입에 HH24의 형태로 붙여주면 원했던 데이터를 조회할 수 있다.
SELECT * FROM DATE_TEST WHERE TO_CHAR(REG_DT,'yyyy-MM-dd HH24') >= '2020-12-23 13';
단순하게 넘어갈 수 있지만 중요한 로그나 에러를 확인할 때 실수할 수 도 있으니,
다시 정리해본다.
반응형'programming > SQL' 카테고리의 다른 글
[MySQL/MariaDB] 소수점 특정 자릿수까지 표시하기 (0) 2021.10.28 [Oracle] 오라클 날짜 포맷 사용(TO_CHAR) (0) 2021.07.20 [SQL] Oracle Merge Into 사용법 (0) 2020.06.04 [ORACLE] 오라클 시퀀스 에러 CURRVAL, NEXTVAL (0) 2020.04.22 [오라클] 숫자에 콤마 찍기 (0) 2019.12.27