Sử dụng CONCAT() để nối cột DATE, khoảng trắng, và cột TIME thành chuỗi DATETIME, sau đó gán vào cột DATETIME.
Cú pháp
UPDATE tên_bảng SET cột_datetime = CONCAT(cột_date, ' ', cột_time);
Ví dụ minh họa
Tạo bảng có cột DATE, TIME, DATETIME riêng biệt:
mysql> CREATE TABLE getDateTimeFieldsDemo (
-> ShippingDate DATE,
-> ShippingTime TIME,
-> ShippingDatetime DATETIME
-> );
Query OK, 0 rows affected (0.50 sec)
Chèn dữ liệu (chỉ Date và Time):
mysql> INSERT INTO getDateTimeFieldsDemo(ShippingDate, ShippingTime) VALUES
-> ('2018-01-21', '09:45:34'), ('2013-07-26', '13:21:20'),
-> ('2017-12-31', '15:31:40'), ('2019-03-07', '12:13:34');
Xem dữ liệu (ShippingDatetime = NULL):
mysql> SELECT * FROM getDateTimeFieldsDemo;
+--------------+--------------+------------------+ | ShippingDate | ShippingTime | ShippingDatetime | +--------------+--------------+------------------+ | 2018-01-21 | 09:45:34 | NULL | | 2013-07-26 | 13:21:20 | NULL | | 2017-12-31 | 15:31:40 | NULL | | 2019-03-07 | 12:13:34 | NULL | +--------------+--------------+------------------+
Gộp Date + Time → Datetime:
mysql> UPDATE getDateTimeFieldsDemo
-> SET ShippingDatetime = CONCAT(ShippingDate, ' ', ShippingTime);
Query OK, 4 rows affected (0.09 sec)
Kết quả:
mysql> SELECT * FROM getDateTimeFieldsDemo;
+--------------+--------------+---------------------+ | ShippingDate | ShippingTime | ShippingDatetime | +--------------+--------------+---------------------+ | 2018-01-21 | 09:45:34 | 2018-01-21 09:45:34 | | 2013-07-26 | 13:21:20 | 2013-07-26 13:21:20 | | 2017-12-31 | 15:31:40 | 2017-12-31 15:31:40 | | 2019-03-07 | 12:13:34 | 2019-03-07 12:13:34 | +--------------+--------------+---------------------+
Cách khác: Hàm chuyên dụng
-- MySQL 5.7+ UPDATE t SET dt = TIMESTAMP(date_col, time_col); -- Hoặc dùng CAST UPDATE t SET dt = CAST(CONCAT(date_col, ' ', time_col) AS DATETIME);
Ứng dụng thực tế
- Nhập liệu tách ngày/giờ từ form web
- Import dữ liệu từ CSV có cột ngày và giờ riêng
- Migration từ schema cũ tách cột
Lưu ý: Nên lưu trực tiếp DATETIME/TIMESTAMP thay vì tách 2 cột, trừ khi có lý do đặc biệt (index riêng, partition theo ngày...).