programming/SQL

[Oracle] Date 24시간으로 비교하기

LeeBorn 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';

24시간

단순하게 넘어갈 수 있지만 중요한 로그나 에러를 확인할 때 실수할 수 도 있으니,

다시 정리해본다.

반응형