Vấn đề: Chuyển đổi định dạng ngày từ chuỗi 'dd-mm-yyyy' sang 'mm-yyyy'
Cột ShippingDate kiểu VARCHAR lưu như '10-11-2017'. Cần trích xuất tháng-năm dạng '11-2017'.
Giải pháp: STR_TO_DATE + DATE_FORMAT
Chuỗi → DATE (STR_TO_DATE) → Chuỗi định dạng mới (DATE_FORMAT).
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (ShippingDate VARCHAR(40));
INSERT INTO DemoTable VALUES
('10-11-2017'), ('31-01-2019'), ('02-02-2018'), ('10-06-2013');
2. Truy vấn chuyển đổi
SELECT DATE_FORMAT(STR_TO_DATE(ShippingDate, '%d-%m-%Y'), '%m-%Y')
FROM DemoTable;
3. Kết quả
+-----------------------------------------------------------+
| DATE_FORMAT(STR_TO_DATE(ShippingDate,'%d-%m-%Y'),'%m-%Y') |
+-----------------------------------------------------------+
| 11-2017 |
| 01-2019 |
| 02-2018 |
| 06-2013 |
+-----------------------------------------------------------+
Giải thích format
| Specifier | Ý nghĩa | Ví dụ |
|---|---|---|
%d | Ngày (01-31) | 10, 31, 02 |
%m | Tháng (01-12) | 11, 01, 02, 06 |
%Y | Năm (4 chữ số) | 2017, 2019, 2018, 2013 |
%m-%Y | Tháng-Năm | 11-2017, 01-2019... |
Lưu ý quan trọng
- Format trong
STR_TO_DATEphải khớp chính xác dữ liệu (dấu-, thứ tự d/m/Y). Sai format → trả NULL. - Nên lưu ngày đúng kiểu
DATE/DATETIMEthay vì VARCHAR – dễ truy vấn, index, tính toán. - MySQL 8.0+ có thể dùng
CAST(ShippingDate AS DATE)nếu format chuẩn ISO (YYYY-MM-DD).
Mở rộng: Hiển thị kèm các cột khác
SELECT *, DATE_FORMAT(STR_TO_DATE(ShippingDate, '%d-%m-%Y'), '%m-%Y') AS MonthYear
FROM DemoTable;