Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Trích xuất ngày tháng từ chuỗi văn bản trong MySQL

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/201812/31/2018
Carol has got joining date.01/11/201901/11/2019
Sam will arrive at.12/03/205012/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.