PostgreSQL 中 NOW() 和 CURRENT_DATE 的用法區(qū)別
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
?主要區(qū)別
具體例子說明1. 基本用法sql
-- NOW() 返回完整的時間戳 SELECT NOW(); -- 2025-08-06 15:41:48.123456+08 -- CURRENT_DATE 只返回日期 SELECT CURRENT_DATE; -- 2025-08-06 -- CURRENT_DATE 相當(dāng)于 NOW()::date SELECT NOW()::date; -- 2025-08-06 2. 在查詢中的使用場景sql
-- 場景1:記錄操作時間(需要精確時間) INSERT INTO user_logs (user_id, action, created_at) VALUES (1, 'login', NOW()); -- 記錄精確到毫秒的登錄時間 -- 場景2:按日期查詢(只需要日期) SELECT * FROM orders WHERE order_date = CURRENT_DATE; -- 查找今天的訂單 -- 錯誤用法:用NOW()進(jìn)行日期比較 SELECT * FROM orders WHERE order_date = NOW(); -- 這幾乎不會匹配,因為NOW()包含時間 3. 日期計算的區(qū)別sql
-- 使用CURRENT_DATE進(jìn)行日期計算(推薦) SELECT CURRENT_DATE + INTERVAL '1 day'; -- 明天 SELECT CURRENT_DATE - 7; -- 7天前 -- 使用NOW()進(jìn)行日期計算(也可以,但需要轉(zhuǎn)換) SELECT (NOW() + INTERVAL '1 day')::date; -- 需要轉(zhuǎn)換類型 SELECT (NOW()::date - 7); -- 需要先轉(zhuǎn)換為日期 4. 時間間隔計算sql
-- 計算兩個日期之間的天數(shù)差(使用CURRENT_DATE) SELECT CURRENT_DATE - '2025-01-01'::date; -- 返回218(天數(shù)) -- 計算時間間隔(使用NOW()) SELECT NOW() - '2025-08-06 10:00:00'::timestamp; -- 返回05:41:48.123456 -- 天數(shù)計算示例 SELECT id FROM mis_white_list WHERE (CURRENT_DATE - input_time::date) <= valid_days; -- 正確的天數(shù)比較 5. 在條件判斷中的使用sql
-- 檢查是否在某個時間范圍內(nèi)(使用NOW()) SELECT * FROM events WHERE start_time <= NOW() AND end_time >= NOW(); -- 檢查是否是今天(使用CURRENT_DATE) SELECT * FROM appointments WHERE appointment_date = CURRENT_DATE; -- 檢查是否在過去7天內(nèi) SELECT * FROM notifications WHERE created_at::date >= CURRENT_DATE - 7; 6. 性能考慮sql
-- CURRENT_DATE 通常更快,因為不涉及時間計算 EXPLAIN ANALYZE SELECT * FROM sales WHERE sale_date = CURRENT_DATE; -- NOW() 在需要轉(zhuǎn)換為日期時會有額外開銷 EXPLAIN ANALYZE SELECT * FROM sales WHERE sale_date = NOW()::date; 最佳實踐建議
sql
-- 正確:使用CURRENT_DATE進(jìn)行天數(shù)計算 SELECT id FROM mis_white_list WHERE (CURRENT_DATE - input_time::date) <= valid_days; -- 也可以但不夠優(yōu)雅:使用NOW() SELECT id FROM mis_white_list WHERE (NOW()::date - input_time::date) <= valid_days; 總結(jié): 該文章在 2025/8/21 9:03:40 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |