DATE(날짜시간컬럼)으로 시간 부분을 떼고 날짜만 비교하면 특정 날짜의 레코드를 쉽게 업데이트할 수 있습니다.
구문
UPDATE 테이블 SET 컬럼=값 WHERE DATE(날짜시간컬럼) = CURDATE();
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable1816 (
-> Name VARCHAR(20),
-> JoiningDate DATETIME
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1816 VALUES('Chris','2019-11-29 12:34:50');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1816 VALUES('David','2019-11-30 11:00:00');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1816 VALUES('Mike','2018-11-30 10:20:30');
Query OK, 1 row affected (0.00 sec)
데이터 조회
mysql> SELECT * FROM DemoTable1816;
+-------+---------------------+ | Name | JoiningDate | +-------+---------------------+ | Chris | 2019-11-29 12:34:50 | | David | 2019-11-30 11:00:00 | | Mike | 2018-11-30 10:20:30 | +-------+-------------+-------+ 3 rows in set (0.00 sec)
오늘 날짜(2019-11-30)와 매칭되는 행 업데이트
mysql> UPDATE DemoTable1816 SET Name='Robert' WHERE DATE(JoiningDate) = CURDATE(); Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
업데이트 후
mysql> SELECT * FROM DemoTable1816;
+--------+---------------------+ | Name | JoiningDate | +--------+---------------------+ | Chris | 2019-11-29 12:34:50 | | Robert | 2019-11-30 11:00:00 | | Mike | 2018-11-30 10:20:30 | +--------+---------------------+ 3 rows in set (0.00 sec)
성능 팁: DATE(컬럼) 연산은 인덱스를 사용 못 합니다. 대용량이면 WHERE JoiningDate >= '2019-11-30' AND JoiningDate < '2019-12-01'처럼 범위 조건으로 인덱스 활용하세요.