Tạo ngày từ các cột riêng biệt trong MySQL
Để tạo một giá trị ngày (DATE) từ các cột riêng biệt chứa ngày, tháng, năm trong MySQL, bạn có thể sử dụng hàm tích hợp STR_TO_DATE() kết hợp với CONCAT() và LPAD().
Cú pháp
SELECT STR_TO_DATE(
CONCAT(cotNam, '-', LPAD(cotThang, 2, '0'), '-', LPAD(cotNgay, 2, '0')),
'%Y-%m-%d'
) AS tenBien FROM tenBang;
Giải thích:
LPAD(cot, 2, '0'): Đảm bảo ngày/tháng luôn có 2 chữ số (ví dụ: 9 → '09').CONCAT(...): Ghép chuỗi thành định dạng 'YYYY-MM-DD'.STR_TO_DATE(..., '%Y-%m-%d'): Chuyển chuỗi thành kiểu DATE.
Ví dụ minh họa
Tạo bảng demo:
CREATE TABLE DateCreateDemo (
`Day` VARCHAR(2),
`Month` VARCHAR(2),
`Year` VARCHAR(4)
);
Chèn dữ liệu:
INSERT INTO DateCreateDemo VALUES
('15','12','2018'),
('10','11','2016'),
('12','6','2017'),
('9','8','2019'),
('10','5','2020');
Truy vấn tạo ngày:
SELECT STR_TO_DATE(
CONCAT(Year, '-', LPAD(Month, 2, '0'), '-', LPAD(Day, 2, '0')),
'%Y-%m-%d'
) AS DateDemo FROM DateCreateDemo;
Kết quả
+------------+
| DateDemo |
+------------+
| 2018-12-15 |
| 2016-11-10 |
| 2017-06-12 |
| 2019-08-09 |
| 2020-05-10 |
+------------+
Lưu ý: Cách này hoạt động tốt khi các cột lưu trữ dưới dạng chuỗi (VARCHAR/CHAR). Nếu cột đã là kiểu số (INT), bạn có thể bỏ qua LPAD và dùng CONCAT_WS('-', Year, Month, Day) để gọn hơn.