[MySQL] 날짜 더하기, 빼기 함수 (DATE_ADD, DATE_SUB) 이해하기

    MySQL(MariaDB 포함)에서 날짜값을 더하거나 뺄 때 사용하는 함수는 DATE_ADD와 DATE_SUB가 있다. 이 함수를 사용해서 현재일보다 7일 전, 한달 전과 같은 데이터를 가지고 오거나 시한이 있는 컨텐츠의 경우 마감일을 지정한다든지 하는 로직등을 구현할 수 있다.

     

    [MySQL] 날짜 더하기, 빼기 함수 (DATE_ADD, DATE_SUB) 이해하기


    DATE_ADD 및 DATE_SUB 사용법

    DATE_ADD(date, INTERVAL value interval_type)
    DATE_SUB(date, INTERVAL value interval_type)

    날짜를 더하거나 빼는 방법은 메소드만 다를 뿐 사용 방법은 동일하다.

     

    • 첫번째 인자인 date는 수정해야 할 대상 날짜값이다.
    • 두번째 인자인 value는 더하거나 뺄 시간 값이고, interval_type는 시간 유형이다.

     

    시간 유형

    유형 내용
    MICROSECOND 마이크로 초, 즉 백만분의 1초
    SECOND
    MINUTE
    HOUR
    DAY
    WEEK
    MONTH
    QUARTER 분기
    YEAR 년도

     

    참고로 시간 유형은 조합을 해서 좀 더 디테일한 날짜값을 조절할 수 있다. 예를 들어 7일 5시간 후와 같은 복잡한 시간 값도 위의 시간 유형을 조합해서 만들 수 있다.

     

     

    DATE_ADD 및 DATE_SUB 예제

    참고로 시간은 2022년 10월 11일 오전 10시라고 가정

     

    현재 시간에 0.5초 더하기 및 빼기

    select date_add(now(), interval 500000 MICROSECOND);
    // 2022-10-11 10:00:00.500
    
    select date_sub(now(), interval 500000 MICROSECOND);
    // 2022-10-11 09:59:59.500

     

    현재 시간에서 5초 더하기 및 빼기

    select date_add(now(), interval 5 SECOND);
    // 2022-10-11 10:00:05
    
    select date_sub(now(), interval 5 SECOND);
    // 2022-10-06 10:00:00

     

    현재 시간에 10분 더하기 및 빼기

    select date_add(now(), interval 10 MINUTE);
    // 2022-10-11 10:10:00
    
    select date_sub(now(), interval 10 MINUTE);
    // 2022-10-11 09:50:00

     

    현재 시간에 1시간 더하기 및 빼기

    select date_add(now(), interval 1 HOUR);
    // 2022-10-11 11:00:00
    
    select date_sub(now(), interval 1 HOUR);
    // 2022-10-11 09:00:00

     

    현재 시간에 5일 더하기 및 빼기

    select date_add(now(), interval 5 DAY);
    // 2022-10-16 10:00:00
    
    select date_sub(now(), interval 5 DAY);
    // 2022-10-06 10:00:00

     

    현재 시간에 2달 더하기

    select date_add(now(), interval 2 MONTH);
    // 2022-12-11 10:00:00
    
    select date_sub(now(), interval 2 MONTH);
    // 2022-08-11 10:00:00

     

    현재 시간에 1분기(3개월) 더하기

    select date_add(now(), interval 1 QUARTER);
    // 2023-01-11 10:00:00
    
    select date_sub(now(), interval 1 QUARTER);
    // 2022-07-11 10:00:00

     

    현재 시간에 10년 더하기

    select date_add(now(), interval 10 YEAR);
    // 2032-10-11 10:00:00
    
    select date_sub(now(), interval 10 YEAR);
    // 2012-10-11 10:00:00

     

    위에서 설명한 것처럼 10시 10분 뒤와 같이 디테일한 설정들도 유형의 조합을 통해서 제공하고 있다. 다만 조합의 경우 아무렇게나 조합을 만드는 것이 아니라 정해진 규칙이 존재한다.

     

     

    시간 유형 조합 

    조합 매개변수 조합 명칭 형식
    SECOND_MICROSECOND 초 마이크로초 초.마이크로초
    MINUTE_MICROSECOND 분 마이크로초 분:초.마이크로초
    MINUTE_SECOND 분 초 분:초
    HOUR_MICROSECOND 시간 마이크로초 시간:분:초.마이크로초
    HOUR_SECOND 시간 초 시간:분:초
    HOUR_MINUTE 시간 분 시간:분
    DAY_MICROSECOND 일 마이크로초 일 시간:분:초.마이크로초
    DAY_SECOND 일 초 일 시간:분:초
    DAY_MINUTE 일 분 일 시간:분
    DAY_HOUR 일 시간 일 시간
    YEAR_MONTH 년 월 년-월

    - 위의 매개변수와 같이 조합의 경우 최대 값과 최소값을 조합하여 매개변수가 만들어지는 것을 확인할 수 있다. 예를 들어 5시간 10분 52초와 같은 경우, 사이에 껴 있는 분(Minute)이 아닌 시(Hour)와 초(Second)가 최대와 최소값이니 HOUR_SECOND와 같은 조합이 만들어진다. 이 패턴을 이해한다면, 위의 매개변수를 외우지 않아도 충분히 활용할 수 있을 것이다.

     

    시간 유형 조합 예시

    DAY_HOUR

    예시) 5일 2시간을 더하기

    select date_add(now(), interval '5 2' DAY_HOUR);
    // 2022-10-16 12:00:00

     

    HOUR_SECOND

    예시) 2시간 10분 5초를 더하기

    select date_add(now(), interval '2:10:5' HOUR_SECOND);
    // 2022-10-11 12:10:05

     

    위와 같이 시간 유형 조합의 경우 디테일한 시간을 추가 혹은 뺄 수 있기 때문에 보다 유용하게 날짜값을 계산할 수 있게 될 것이다.

     

    연관 포스팅

    [MySQL] date_format 설정 (날짜 포맷 변경)

     

    [MySQL] date_format 설정 (날짜 포맷 변경)

    MySQL에서는 date_format으로 날짜값을 문자열로 변경하는 포맷을 지원해 준다. 아마 DBMS로 개발을 하는 웹개발자라면 한번씩은 꼭 써보게 되는 기능일텐데, 오늘은 date_format의 포맷 설정값들과 예시

    needjarvis.tistory.com

     

    댓글

    Designed by JB FACTORY