MySQL에서 특정 날짜에서 하루를 빼고 싶다면 DATE_SUB() 함수를 사용하면 됩니다. 이 함수는 지정한 날짜에서 원하는 시간 간격(interval)만큼을 빼주는 아주 유용한 날짜 계산 함수입니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다. 입학일(AdmissionDate)을 저장하는 timestamp 타입의 컬럼을 가진 테이블입니다.
mysql> create table DemoTable
-> (
-> AdmissionDate timestamp
-> );
Query OK, 0 rows affected (1.05 sec)
2. 데이터 삽입하기
insert 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('2019-01-01');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('2018-12-31');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2017-03-13');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-01-02');
Query OK, 1 row affected (0.08 sec)3. 저장된 데이터 확인하기
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------------+
| AdmissionDate |
+---------------------+
| 2019-01-01 00:00:00 |
| 2018-12-31 00:00:00 |
| 2017-03-13 00:00:00 |
| 2019-01-02 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
4. DATE_SUB()로 하루 빼기
이제 핵심인 하루를 빼는 쿼리입니다. DATE_SUB(날짜컬럼, INTERVAL 1 DAY) 형태로 작성하면 됩니다.
mysql> select date_sub(AdmissionDate,interval 1 day) from DemoTable;
실행 결과는 다음과 같습니다. 모든 날짜에서 정확히 하루씩 빠진 것을 확인할 수 있습니다.
+----------------------------------------+
| date_sub(AdmissionDate,interval 1 day) |
+----------------------------------------+
| 2018-12-31 00:00:00 |
| 2018-12-30 00:00:00 |
| 2017-03-12 00:00:00 |
| 2019-01-01 00:00:00 |
+----------------------------------------+
4 rows in set (0.00 sec)
참고: 다양한 활용 방법
DATE_SUB() 함수는 'day' 외에도 여러 단위를 지원합니다. 예를 들어 INTERVAL 1 MONTH(한 달), INTERVAL 1 YEAR(1년), INTERVAL 1 HOUR(1시간) 등으로 변경하여 다양한 기간 계산이 가능합니다. 또한 반대로 날짜에 기간을 더하고 싶다면 DATE_ADD() 함수를 사용하면 됩니다.