Khi ngày tháng nhúng trong chuỗi văn bản (ví dụ: 'John has got joining date.12/31/2018'), dùng SUBSTRING_INDEX() để tách lấy phần cuối sau dấu phân cách.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu:
CREATE TABLE DemoTable (Title TEXT);
INSERT INTO DemoTable VALUES
('John has got joining date.12/31/2018'),
('Carol has got joining date.01/11/2019'),
('Sam will arrive at.12/03/2050');
Trích xuất phần sau dấu chấm cuối cùng:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Title, '.', -1), '.', 1) AS ExtractedDate FROM DemoTable;
Kết quả
| Title (gốc) | ExtractedDate |
|---|---|
| John has got joining date.12/31/2018 | 12/31/2018 |
| Carol has got joining date.01/11/2019 | 01/11/2019 |
| Sam will arrive at.12/03/2050 | 12/03/2050 |
Giải thích
SUBSTRING_INDEX(Title, '.', -1): Lấy phần chuỗi sau dấu chấm cuối cùng →'12/31/2018'.SUBSTRING_INDEX(..., '.', 1): Lấy phần trước dấu chấm đầu tiên của kết quả trên (an toàn nếu ngày chứa dấu chấm).
Cách hiện đại hơn (MySQL 8.0+)
Dùng REGEXP_SUBSTR() trích xuất theo pattern:
SELECT REGEXP_SUBSTR(Title, '[0-9]{2}/[0-9]{2}/[0-9]{4}') AS ExtractedDate
FROM DemoTable;
Hoặc chuyển thành kiểu DATE:
SELECT STR_TO_DATE(REGEXP_SUBSTR(Title, '[0-9]{2}/[0-9]{2}/[0-9]{4}'), '%m/%d/%Y') AS ParsedDate
FROM DemoTable;
Lưu ý
Cách dùng SUBSTRING_INDEX lồng nhau chỉ phù hợp khi format chuỗi cố định, dễ hỏng nếu dữ liệu không đều. Ưu tiên REGEXP_SUBSTR (MySQL 8.0+) hoặc xử lý ở lớp ứng dụng.