MySQL NOW() 函數 (取得現在的日期時間)

NOW() 是 MySQL 中用來取得當前日期和時間的函數。它會返回伺服器當前時區的日期時間值,格式為 YYYY-MM-DD HH:MM:SS

NOW() 語法 (Syntax)

NOW([fsp])
  • fsp (fractional seconds precision):可選參數,指定秒數的小數位數精度,範圍為 0-6。預設為 0(不顯示小數秒)。

NOW() 函數用法範例 (Example)

基本用法

SELECT NOW();
-- 結果:2024-11-22 14:30:45

指定秒數精度

SELECT NOW(3);
-- 結果:2024-11-22 14:30:45.123

SELECT NOW(6);
-- 結果:2024-11-22 14:30:45.123456

在 INSERT 語句中使用

INSERT INTO orders (product_name, order_date)
VALUES ('Laptop', NOW());

計算從現在開始的時間

-- 取得 7 天後的日期時間
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 7 DAY) AS next_week;

-- 取得 1 小時後的時間
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 HOUR) AS next_hour;

設定預設值

在建立資料表時,可以使用 NOW() 作為預設值:

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message VARCHAR(255),
    created_at DATETIME DEFAULT NOW()
);

NOW() 與其他時間函數的比較

函數返回類型返回值說明
NOW()DATETIME2024-11-22 14:30:45當前日期和時間
CURDATE()DATE2024-11-22只有日期部分
CURTIME()TIME14:30:45只有時間部分
SYSDATE()DATETIME2024-11-22 14:30:45函數執行時的時間

NOW() vs SYSDATE() 的差異

  • NOW() 在整個查詢中返回同一個時間點(語句開始執行的時間)。
  • SYSDATE() 每次被呼叫時都會返回當前的精確時間(動態時間)。
-- 在同一個查詢中比較
SELECT NOW(), SLEEP(2), NOW();
-- 兩個 NOW() 返回的時間相同

SELECT SYSDATE(), SLEEP(2), SYSDATE();
-- 兩個 SYSDATE() 返回的時間相差 2 秒

常見應用

篩選今天的記錄

SELECT * FROM orders 
WHERE DATE(order_date) = DATE(NOW());

篩選最近 24 小時的記錄

SELECT * FROM orders 
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 24 HOUR);

篩選最近 7 天的記錄

SELECT * FROM orders 
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 7 DAY);

更多 MySQL 相關的日期時間函數在這邊
更多 SQL Server 相關的日期時間函數在這邊