MySQL에서 date() 함수를 사용해 날짜를 비교하고 특정 열을 업데이트하려면 아래와 같은 문법을 사용합니다.
update yourTableName set yourColumnName=yourValue where date(yourColumnName)=curdate();
여기서 date() 함수는 datetime 타입의 값에서 날짜 부분만 추출하고, curdate()는 현재 날짜를 반환합니다. 두 값을 비교하여 조건에 맞는 행만 업데이트할 수 있습니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1816
(
Name varchar(20),
JoiningDate datetime
);
Query OK, 0 rows affected (0.00 sec)샘플 데이터 삽입
insert 명령어를 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
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)테이블 데이터 조회
select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
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)
date() 함수로 날짜 조건에 맞춰 열 업데이트
이제 날짜를 비교하여 열을 업데이트하는 쿼리를 실행해 보겠습니다. JoiningDate의 날짜가 오늘(curdate())과 일치하는 행의 Name을 'Robert'로 변경합니다.
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)
결과를 보면 David의 레코드가 Robert로 변경된 것을 확인할 수 있습니다. 이 예제에서는 curdate()가 '2019-11-30'일 때 실행되었기 때문에, JoiningDate가 '2019-11-30 11:00:00'인 행의 날짜 부분만 일치하여 해당 행만 업데이트되었습니다. 시간 정보까지 정확히 일치해야 하는 경우라면 now() 함수를 사용하거나 datetime 전체를 비교하면 됩니다.