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

Tạo ngày từ các trường ngày, tháng, năm trong MySQL

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.