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

MySQL에서 '10/12/2010' 형식 날짜의 특정 연도를 기준으로 레코드 업데이트하기

날짜가 '10/12/2010'처럼 문자열로 저장된 경우, 특정 연도에 해당하는 레코드만 골라서 업데이트하려면 STR_TO_DATE() 함수와 YEAR() 함수를 함께 사용하면 됩니다.

먼저 전체 구문은 다음과 같습니다.

update yourTableName set yourColumnName1=yourValue1 where YEAR(str_to_date(yourColumnName2,'%d/%m/%Y'))=yourValue2;

여기서 STR_TO_DATE()는 '%d/%m/%Y' 형식(일/월/년)으로 저장된 문자열을 실제 DATE 값으로 변환하고, YEAR()는 변환된 날짜에서 연도 부분만 추출하여 WHERE 조건과 비교합니다.

예제 테이블 생성

먼저 테스트용 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1924
    (
    UserName varchar(20),
    UserJoiningDate varchar(40)
    );
Query OK, 0 rows affected (0.00 sec)

insert 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1924 values('Chris','10/12/2010');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('David','20/01/2011');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('Mike','20/01/2010');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('Carol','26/04/2013');
Query OK, 1 row affected (0.00 sec)

전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1924;

실행 결과는 다음과 같습니다.

+----------+-----------------+
| UserName | UserJoiningDate |
+----------+-----------------+
| Chris    | 10/12/2010      |
| David    | 20/01/2011      |
| Mike     | 20/01/2010      |
| Carol    | 26/04/2013      |
+----------+-----------------+
4 rows in set (0.00 sec)

특정 연도 기준으로 레코드 업데이트

이제 입사 연도가 2010년인 레코드의 UserName을 'Robert'로 변경하는 쿼리를 실행해 보겠습니다.

mysql> update DemoTable1924 set UserName='Robert' where YEAR(str_to_date(UserJoiningDate,'%d/%m/%Y'))=2010;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2 Warnings: 0

쿼리 실행 결과, 2010년에 해당하는 두 개의 레코드가 성공적으로 변경되었습니다.

업데이트 결과 확인

테이블의 레코드를 다시 한 번 조회해 보겠습니다.

mysql> select * from DemoTable1924;

실행 결과는 다음과 같습니다.

+----------+-----------------+
| UserName | UserJoiningDate |
+----------+-----------------+
| Robert   | 10/12/2010      |
| David    | 20/01/2011      |
| Robert   | 20/01/2010      |
| Carol    | 26/04/2013      |
+----------+-----------------+
4 rows in set (0.00 sec)

위 출력에서 볼 수 있듯이 UserJoiningDate의 연도가 2010인 Chris와 Mike의 이름만 'Robert'로 변경되었고, 나머지 레코드는 그대로 유지되었습니다.

참고로 이 방식은 WHERE 절에서 컬럼에 함수를 적용하기 때문에 인덱스를 활용하지 못할 수 있습니다. 대량의 데이터를 자주 조회한다면 날짜를 DATE 타입 컬럼으로 저장하거나, 연도 값을 별도 컬럼으로 관리하는 것이 성능 면에서 더 유리합니다.