Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 날짜의 일(day) 부분만 업데이트하는 방법

MySQL에서 날짜(DATE) 데이터를 다루다 보면 연도와 월은 그대로 두고 일(day) 부분만 특정 값으로 변경해야 하는 경우가 있습니다. 이럴 때는 UPDATE 문과 DATE_FORMAT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

이 글에서는 실제 예제를 통해 날짜 컬럼의 일 부분만 수정하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 날짜 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> AdmissionDate date
-> );
Query OK, 0 rows affected (1.38 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('2019-05-12');
Query OK, 1 row affected (0.52 sec)

mysql> insert into DemoTable values('2019-05-18');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('2019-04-19');
Query OK, 1 row affected (0.42 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

출력 결과

+---------------+
| AdmissionDate |
+---------------+
| 2019-05-12 |
| 2019-05-18 |
| 2019-04-19 |
+---------------+
3 rows in set (0.00 sec)

4. 일(day) 부분만 업데이트하기

다음은 날짜 컬럼의 일 부분만 변경하는 핵심 쿼리입니다. 아래 예제에서는 해당 컬럼의 모든 날짜를 25일로 통일하고 있습니다.

mysql> update DemoTable
-> set AdmissionDate=date_format(AdmissionDate,'%Y-%m-25') ;
Query OK, 3 rows affected (0.44 sec)
Rows matched: 3 Changed: 3 Warnings: 0

여기서 사용된 형식 지정자의 의미는 다음과 같습니다.

  • %Y : 연도(예: 2019) — 기존 값을 그대로 유지
  • %m : 월(01~12) — 기존 값을 그대로 유지
  • 25 : 일 부분을 고정값 25로 대체

즉, DATE_FORMAT() 함수가 기존 날짜에서 연도와 월을 추출한 뒤, 일 자리에 원하는 숫자를 넣어 새로운 날짜 문자열을 만들어 주는 원리입니다.

5. 업데이트 결과 확인하기

변경된 레코드를 다시 한번 조회해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+---------------+
| AdmissionDate |
+---------------+
| 2019-05-25 |
| 2019-05-25 |
| 2019-04-25 |
+---------------+
3 rows in set (0.00 sec)

연도와 월은 그대로 유지되고, 일 부분만 모두 25일로 변경된 것을 확인할 수 있습니다.

마무리 및 참고 사항

이처럼 DATE_FORMAT() 함수를 활용하면 날짜의 특정 부분만 손쉽게 수정할 수 있습니다. 만약 일 부분을 고정값이 아닌 다른 값으로 바꾸고 싶다면 형식 문자열의 마지막 숫자만 변경하면 됩니다.

또한, 조건에 따라 일부 행만 업데이트하고 싶다면 WHERE 절을 추가하면 됩니다.

mysql> update DemoTable
-> set AdmissionDate=date_format(AdmissionDate,'%Y-%m-10')
-> where month(AdmissionDate)=5;

위 쿼리는 5월에 해당하는 레코드만 골라 일 부분을 10일로 변경합니다. 상황에 맞게 응용해 보시기 바랍니다.