目次
1. MySQL NOW 函數的概述
MySQL 的 NOW 函數是用於在資料庫中簡單取得目前日期與時間的函數。透過活用 NOW 函數,可取得資料插入時的時間戳記以及對日誌記錄有幫助的時間資訊。雖然簡單卻非常強大的工具,已被廣泛使用。NOW 函數的基本語法
NOW 函數的語法非常簡單。使用以下查詢即可取得目前的日期時間。SELECT NOW();
執行結果會以 YYYY-MM-DD HH:MM:SS
的格式回傳。例如,若是 2024 年 10 月 24 日 16 時 30 分,則會得到以下結果。2024-10-24 16:30:00
此外,NOW 函數會根據資料庫的時區回傳目前的日期時間。藉此,可在整個系統中實現統一的時間管理。NOW 函數的用途
NOW 函數在以下情境中特別便利。- 日誌記錄: 自動記錄資料的變更時間與插入時間。
- 時間戳記: 用於記錄使用者操作的時間點。
- 時間依賴的篩選: 用於抽取在特定期間內發生的資料。

2. NOW函數的基本使用範例
讓我們來看看利用 NOW 函數取得目前日期時間的基本使用範例。SELECT NOW();
此查詢會回傳目前的日期時間。除了以字串形式取得外,也可以以數值形式取得。使用下列查詢,可以數值形式(YYYYMMDDHHMMSS
)回傳目前的日期時間。SELECT NOW() + 0;
例如,結果會以「20241024163000」的形式回傳,對於以數值形式處理時相當方便。小數秒的精度指定
在 NOW 函數中,可以指定小數秒的精度。如下使用參數指定精度。SELECT NOW(3);
此查詢會回傳具有小數點以下 3 位精度的結果。例如「2024-10-24 16:30:00.123」的形式。對於需要秒級精度的系統而言,這是一項非常便利的功能。3. SYSDATE() 與 NOW() 的差異
NOW 函數與相似的函數 SYSDATE() 雖然存在,但它們的運作稍有不同。- NOW(): 取得查詢執行時的時間,整個語句中保持相同的時間。即使交易持續很長時間,也會返回相同的結果。
- SYSDATE(): 在查詢的每個步驟取得當時的時間。也就是說,即使在長時間的交易中,也會取得即時的時間。
查詢內差異的範例
以下為示範 SYSDATE() 與 NOW() 動作差異的查詢範例。SELECT NOW(), SYSDATE();
結果如下。NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
查詢執行瞬間的時間差在 SYSDATE() 中會被反映,而 NOW() 則保留查詢開始執行的時間。如此,兩者的運作雖略有不同,但依使用情境選擇最適合的函式是很重要的。
4. NOW函數的應用範例
NOW函數在特定情境下非常有用。例如,想要自動記錄資料插入的日期時間時,可如下使用NOW函數。INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
因此,於記錄插入時間會自動記錄到created_at
欄位。此功能在日誌記錄與事件追蹤上尤其受到重視。 此外,若要抽取過去7天內建立的資料,可如下活用NOW函數。SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
此查詢會取得從現在的日期時間起,過去7天內建立的所有記錄。對於依時間而定的資料抽取,NOW函數相當有效。5. NOW 函數的注意事項
使用 NOW 函數時,有幾項需要注意的地方。特別是因為可能會影響交易的完整性,所以需要留意使用的情境。- 交易內的運作: NOW 函數會在交易內返回一致的結果,即使在長時間的處理過程中也會回傳相同的時間。這對於維持資料的完整性非常重要。然而,若需要即時的時間,使用 SYSDATE() 會比較適合。