PostgreSQL 中 NOW() 和 CURRENT_DATE 的用法区别
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
主要区别
具体例子说明1. 基本用法sql
-- NOW() 返回完整的时间戳 SELECT NOW(); -- 2025-08-06 15:41:48.123456+08 -- CURRENT_DATE 只返回日期 SELECT CURRENT_DATE; -- 2025-08-06 -- CURRENT_DATE 相当于 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()进行日期比较 SELECT * FROM orders WHERE order_date = NOW(); -- 这几乎不会匹配,因为NOW()包含时间 3. 日期计算的区别sql
-- 使用CURRENT_DATE进行日期计算(推荐) SELECT CURRENT_DATE + INTERVAL '1 day'; -- 明天 SELECT CURRENT_DATE - 7; -- 7天前 -- 使用NOW()进行日期计算(也可以,但需要转换) SELECT (NOW() + INTERVAL '1 day')::date; -- 需要转换类型 SELECT (NOW()::date - 7); -- 需要先转换为日期 4. 时间间隔计算sql
-- 计算两个日期之间的天数差(使用CURRENT_DATE) SELECT CURRENT_DATE - '2025-01-01'::date; -- 返回218(天数) -- 计算时间间隔(使用NOW()) SELECT NOW() - '2025-08-06 10:00:00'::timestamp; -- 返回05:41:48.123456 -- 天数计算示例 SELECT id FROM mis_white_list WHERE (CURRENT_DATE - input_time::date) <= valid_days; -- 正确的天数比较 5. 在条件判断中的使用sql
-- 检查是否在某个时间范围内(使用NOW()) SELECT * FROM events WHERE start_time <= NOW() AND end_time >= NOW(); -- 检查是否是今天(使用CURRENT_DATE) SELECT * FROM appointments WHERE appointment_date = CURRENT_DATE; -- 检查是否在过去7天内 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() 在需要转换为日期时会有额外开销 EXPLAIN ANALYZE SELECT * FROM sales WHERE sale_date = NOW()::date; 最佳实践建议
sql
-- 正确:使用CURRENT_DATE进行天数计算 SELECT id FROM mis_white_list WHERE (CURRENT_DATE - input_time::date) <= valid_days; -- 也可以但不够优雅:使用NOW() SELECT id FROM mis_white_list WHERE (NOW()::date - input_time::date) <= valid_days; 总结: 该文章在 2025/8/21 9:03:40 编辑过 |
关键字查询
相关文章
正在查询... |