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

Cách gộp cột DATE và TIME thành TIMESTAMP trong MySQL


Cú pháp

Sử dụng CONCAT() nối chuỗi rồi CAST() sang DATETIME:

SELECT CAST(CONCAT(cot_ngay, ' ', cot_gio) AS DATETIME) AS ten_alias FROM ten_bang;

Ví dụ chi tiết

1. Tạo bảng

mysql> CREATE TABLE DateAndTimeToTimestamp ( 
-> Duedate DATE, 
-> DueTime TIME 
-> ); 
Query OK, 0 rows affected (0.51 sec)

2. Chèn dữ liệu

mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL 2 DAY), '10:30:02'); 
Query OK, 1 row affected (0.34 sec) 
mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL -2 DAY), '12:20:45'); 
Query OK, 1 row affected (0.17 sec) 
mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '01:32:42'); 
Query OK, 1 row affected (0.21 sec) 
mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '14:25:58'); 
Query OK, 1 row affected (0.30 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM DateAndTimeToTimestamp;
+------------+----------+ 
| Duedate    | DueTime  | 
+------------+----------+ 
| 2018-12-16 | 10:30:02 | 
| 2018-12-12 | 12:20:45 | 
| 2018-12-15 | 01:32:42 | 
| 2018-12-13 | 14:25:58 | 
+------------+----------+ 
4 rows in set (0.00 sec)

4. Gộp thành TIMESTAMP

mysql> SELECT CONCAT(Duedate, ' ', DueTime) AS timestampDemo FROM DateAndTimeToTimestamp;
+---------------------+ 
| timestampDemo       | 
+---------------------+ 
| 2018-12-16 10:30:02 | 
| 2018-12-12 12:20:45 | 
| 2018-12-15 01:32:42 | 
| 2018-12-13 14:25:58 | 
+---------------------+ 
4 rows in set (0.00 sec)

Phương pháp thay thế

Dùng TIMESTAMP() function (MySQL)

SELECT TIMESTAMP(Duedate, DueTime) AS combined FROM DateAndTimeToTimestamp;

Dùng ADDTIME()

SELECT ADDTIME(Duedate, DueTime) AS combined FROM DateAndTimeToTimestamp;

So sánh các phương pháp

Phương phápCú phápĐộ chính xácGhi chú
CAST(CONCAT(...))CAST(CONCAT(d, ' ', t) AS DATETIME)CaoChuẩn SQL, rõ ràng
TIMESTAMP(d, t)TIMESTAMP(date_col, time_col)CaoMySQL specific, ngắn gọn
ADDTIME(d, t)ADDTIME(date_col, time_col)CaoCộng time vào date
CONCAT(d, ' ', t)CONCAT(date_col, ' ', time_col)Trung bìnhTrả về VARCHAR, không phải DATETIME

Ứng dụng thực tế

Tạo cột DATETIME từ DATE + TIME riêng biệt

ALTER TABLE orders 
ADD COLUMN created_datetime DATETIME 
GENERATED ALWAYS AS (TIMESTAMP(order_date, order_time)) STORED;

Truy vấn theo khoảng thời gian chính xác

SELECT * FROM events 
WHERE TIMESTAMP(event_date, event_time) BETWEEN '2024-01-01 00:00:00' AND '2024-01-31 23:59:59';

Lưu ý

  • Kết quả CONCAT là chuỗi, cần CAST để thành DATETIME cho phép so sánh/tính toán
  • NULL trong bất kỳ cột nào → kết quả NULL
  • Dùng COALESCE nếu cột có thể NULL: CAST(CONCAT(COALESCE(d, CURDATE()), ' ', COALESCE(t, '00:00:00')) AS DATETIME)