MySQL에서 문자열로부터 날짜를 추출하는 방법
MySQL에서 문자열 안에 포함된 날짜를 추출하려면 SUBSTRING_INDEX() 함수를 활용하면 됩니다. 이 함수는 지정한 구분자(delimiter)를 기준으로 문자열을 분리해 원하는 부분만 반환해 주기 때문에, 문장 끝에 붙어 있는 날짜 정보를 별도의 정규식 없이도 손쉽게 분리할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Title text
-> );
Query OK, 0 rows affected (0.58 sec)
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('John has got joining date.12/31/2018');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Carol has got joining date.01/11/2019');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Sam will arrive at.12/03/2050');
Query OK, 1 row affected (0.87 sec)SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------------------------+
| Title |
+---------------------------------------+
| John has got joining date.12/31/2018 |
| Carol has got joining date.01/11/2019 |
| Sam will arrive at.12/03/2050 |
+---------------------------------------+
3 rows in set (0.00 sec)
SUBSTRING_INDEX()로 날짜 추출하기
문자열에서 날짜 부분만 추출하는 쿼리는 다음과 같습니다.
mysql> select substring_index(substring_index(Title,".", -1), ".", 1) from DemoTable;
이 쿼리는 먼저 SUBSTRING_INDEX(Title, ".", -1)를 통해 마지막 마침표(.) 이후의 모든 내용을 가져오고, 다시 한 번 같은 함수를 적용해 날짜 부분만 깔끔하게 분리합니다. 실행 결과는 다음과 같습니다.
+----------------------------------------------------------+
| substring_index(substring_index(Title,".", -1), ".", 1) |
+----------------------------------------------------------+
| 12/31/2018 |
| 01/11/2019 |
| 12/03/2050 |
+----------------------------------------------------------+
3 rows in set (0.00 sec)
이처럼 SUBSTRING_INDEX()를 중첩해서 사용하면 복잡한 문자열 처리 로직 없이도 문장 속에 포함된 날짜 데이터를 간단하고 확실하게 추출할 수 있습니다.