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

MySQL lấy datetime hiện tại và chỉ date hiện tại?

Hai hàm cơ bản

HàmTrả vềVí dụ
NOW()DATETIME (ngày + giờ)2019-06-02 15:30:39
CURDATE()DATE (chỉ ngày)2019-06-02
CURTIME()TIME (chỉ giờ)15:30:39

Ví dụ minh họa

Lấy datetime hiện tại

mysql> SELECT NOW();
+-----------------------+
| NOW()                 |
+-----------------------+
| 2019-06-02 15:30:39   |
+-----------------------+

Lấy date hiện tại

mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2019-06-02 |
+------------+

Các hàm liên quan

HàmAliasTrả vềTimezone
NOW()CURRENT_TIMESTAMPDATETIMESession TZ
SYSDATE()-DATETIMESystem TZ (real-time)
CURDATE()CURRENT_DATEDATESession TZ
CURTIME()CURRENT_TIMETIMESession TZ
UTC_TIMESTAMP()-DATETIMEUTC
UTC_DATE()-DATEUTC
UTC_TIME()-TIMEUTC

Chuyển đổi

-- DATETIME → DATE
SELECT DATE(NOW());           -- 2019-06-02
SELECT CAST(NOW() AS DATE);   -- 2019-06-02

-- DATE → DATETIME (gán 00:00:00)
SELECT CAST(CURDATE() AS DATETIME);  -- 2019-06-02 00:00:00

Ứng dụng thực tế

Insert với timestamp tự động

CREATE TABLE logs (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    message TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Query hôm nay

SELECT * FROM orders WHERE DATE(created_at) = CURDATE();

Query 7 ngày qua

SELECT * FROM orders 
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);

Lưu ý Timezone

  • NOW(), CURDATE() tuân theo @@session.time_zone
  • SYSDATE() tuân theo system timezone (không đổi bởi SET time_zone)
  • TIMESTAMP: Lưu UTC, chuyển về session TZ khi SELECT
  • DATETIME: Lưu nguyên giá trị, không chuyển đổi
  • Khuyến nghị: Set timezone ở application layer, DB để UTC