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

Gộp cột DATE và TIME thành DATETIME trong MySQL với CONCAT

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...).