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() | DATETIME | 2024-11-22 14:30:45 | 當前日期和時間 |
| CURDATE() | DATE | 2024-11-22 | 只有日期部分 |
| CURTIME() | TIME | 14:30:45 | 只有時間部分 |
| SYSDATE() | DATETIME | 2024-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);