ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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';

    24시간

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

    다시 정리해본다.

    반응형

    댓글

Designed by Tistory.