MySQL에서 특정 날짜의 하루 전, 즉 '어제' 날짜를 구하고 싶다면 subdate() 함수를 사용하면 됩니다. 이 함수는 지정한 날짜에서 원하는 만큼의 시간 간격을 빼주는 역할을 합니다.
subdate() 함수 기본 문법
SELECT SUBDATE(날짜컬럼명, INTERVAL 1 DAY) AS 별칭 FROM 테이블명;
위 문법이 실제로 어떻게 동작하는지 예제 테이블을 만들어 단계별로 확인해 보겠습니다.
1. 예제 테이블 생성
먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> CREATE TABLE YesterdayDateDemo -> ( -> VisitedDateTime DATETIME -> ); Query OK, 0 rows affected (0.59 sec)
2. 날짜 데이터 삽입
INSERT 명령어를 사용해 현재 시간과 과거 날짜 데이터를 입력합니다.
mysql> INSERT INTO YesterdayDateDemo VALUES(NOW());
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO YesterdayDateDemo VALUES('2012-12-26 13:24:35');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO YesterdayDateDemo VALUES('2013-10-22 12:20:32');
Query OK, 1 row affected (0.16 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM YesterdayDateDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | VisitedDateTime | +---------------------+ | 2018-12-18 14:22:48 | | 2012-12-26 13:24:35 | | 2013-10-22 12:20:32 | +---------------------+ 3 rows in set (0.00 sec)
4. subdate()로 어제 날짜 조회하기
이제 subdate() 함수에 INTERVAL 1 DAY 옵션을 적용하여 각 날짜에서 하루를 뺀 결과, 즉 '어제' 날짜를 조회할 수 있습니다.
mysql> SELECT SUBDATE(VisitedDateTime, INTERVAL 1 DAY) AS YesterdayDate FROM YesterdayDateDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | YesterdayDate | +---------------------+ | 2018-12-17 14:22:48 | +---------------------+ 1 row in set (0.00 sec)
추가 팁: CURDATE()와 함께 활용하기
테이블의 데이터가 아니라 현재 날짜 기준으로 어제를 구하고 싶다면 아래 쿼리처럼 활용할 수 있습니다.
mysql> SELECT SUBDATE(CURDATE(), INTERVAL 1 DAY) AS Yesterday; +------------+ | Yesterday | +------------+ | 2018-12-17 | +------------+
또한 MySQL 8.0 이상에서는 더 직관적인 SUBDATE(date, days) 형태나 DATE_SUB() 함수도 동일하게 사용할 수 있으니 상황에 맞게 선택하시면 됩니다.