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

MySQL에서 'dd/mm/yyyy' 형식의 날짜를 'yyyymmdd'로 변환하는 방법

MySQL에서 'dd/mm/yyyy' 형식으로 저장된 문자열 날짜를 'yyyymmdd' 형식으로 변환하려면 STR_TO_DATE() 함수와 DATE_FORMAT() 함수를 함께 사용하면 됩니다. 먼저 STR_TO_DATE()로 문자열을 날짜 타입으로 파싱한 뒤, DATE_FORMAT()으로 원하는 출력 형식을 지정하는 방식입니다.

1단계: 테이블 생성하기

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Admissiondate varchar(200)
);
Query OK, 0 rows affected (0.54 sec)

2단계: 데이터 삽입하기

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

mysql> insert into DemoTable(Admissiondate) values('21/10/2014');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(Admissiondate) values('01/12/2016');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Admissiondate) values('31/01/2017');
Query OK, 1 row affected (0.14 sec)

3단계: 저장된 데이터 확인하기

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

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+---------------+
| Id | Admissiondate |
+----+---------------+
| 1  | 21/10/2014    |
| 2  | 01/12/2016    |
| 3  | 31/01/2017    |
+----+---------------+
3 rows in set (0.00 sec)

4단계: 날짜 형식 변환하기

'dd/mm/yyyy' 형식을 'yyyymmdd' 형식으로 변환하는 핵심 쿼리는 다음과 같습니다.

mysql> select date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d') from DemoTable;

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

+-------------------------------------------------------------+
| date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d') |
+-------------------------------------------------------------+
| 20141021                                                    |
| 20161201                                                    |
| 20170131                                                    |
+-------------------------------------------------------------+
3 rows in set (0.00 sec)

쿼리 동작 원리

  • STR_TO_DATE(Admissiondate, '%d/%m/%Y') : varchar로 저장된 문자열을 '%d/%m/%Y' 형식에 맞춰 해석하여 실제 DATE 타입 값으로 변환합니다.
  • DATE_FORMAT(..., '%Y%m%d') : 변환된 날짜 값을 연월일이 붙어 있는 8자리 숫자 형태(예: 20141021)로 출력합니다.

참고: 주요 포맷 지정자

  • %d — 일(day), 두 자리 표기 (01~31)
  • %m — 월(month), 두 자리 표기 (01~12)
  • %Y — 연도(year), 네 자리 표기

응용: 테이블 데이터를 영구적으로 변경하기

단순히 조회 결과만 변환하는 것이 아니라 테이블에 저장된 값을 그대로 바꾸고 싶다면 UPDATE 문을 활용할 수 있습니다.

mysql> update DemoTable
    set Admissiondate = date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d');
Query OK, 3 rows affected (0.10 sec)
Rows matched: 3  Changed: 3  Warnings: 0

이처럼 STR_TO_DATE()와 DATE_FORMAT()의 조합은 서로 다른 날짜 형식 간의 변환에 매우 유용하게 활용됩니다. 다만, 애초에 날짜 컬럼은 VARCHAR가 아닌 DATE 타입으로 설계하는 것이 정렬·비교·인덱스 활용 면에서 더 바람직하다는 점도 함께 기억해 두시길 권장합니다.