You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中获取从午夜到当前时间的所有记录

在PostgreSQL中查询当日午夜零点至当前时刻数据的几种方法

嘿,我来给你分享几个实用的SQL写法,帮你快速筛选出PostgreSQL数据库中从当日零点到当前时刻的所有数据记录,这些都是日常开发里常用的方案,各有优势:

方法一:使用CURRENT_DATE(最直观简洁)

CURRENT_DATE会直接返回当前日期(不带时间部分,默认对应当日午夜零点),结合CURRENT_TIMESTAMP(当前完整时间)就能精准筛选:

SELECT *
FROM your_table
WHERE your_time_column >= CURRENT_DATE
  AND your_time_column <= CURRENT_TIMESTAMP;

小提示:其实可以简化成your_time_column >= CURRENT_DATE,因为大于等于当日零点的记录自然就是截止到当前时刻的,除非你需要明确限定上限,否则简化写法完全够用。

方法二:使用DATE_TRUNC函数(灵活适配不同时间精度)

如果你需要更灵活的时间截断操作(比如后续要改成按周、按月筛选),DATE_TRUNC是更好的选择,它可以把时间戳截断到指定的精度级别,这里我们截断到day就能得到当日零点:

SELECT *
FROM your_table
WHERE your_time_column >= DATE_TRUNC('day', CURRENT_TIMESTAMP)
  AND your_time_column <= CURRENT_TIMESTAMP;

这个写法的优势在于,只要把'day'换成'hour'、'week'等,就能轻松切换筛选的时间粒度,非常实用。

方法三:使用NOW()结合类型转换(简洁的替代写法)

NOW()和CURRENT_TIMESTAMP功能基本一致,通过::date将其转换为日期类型,同样会自动映射到当日零点:

SELECT *
FROM your_table
WHERE your_time_column >= NOW()::date;

这个写法最为简洁,适合追求代码简洁性的场景。

注意事项

  • 如果你的时间字段是timestamptz(带时区的时间戳)类型,请确保数据库的时区设置符合你的业务需求,可以通过SHOW timezone;命令查看当前时区,避免出现日期偏移的问题。
  • 建议给时间字段建立索引,这样当数据量较大时,查询效率会有明显提升。

内容的提问来源于stack exchange,提问作者Vinaya Nayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:32:13