PostgreSQL按当前时间所在特定周筛选数据的SQL查询问题
精准获取PostgreSQL当前所在周数据的查询方案
你之前用的now()::date - 7是取最近7天的数据,不是自然周范围,所以没法精准匹配目标周(比如2023年第2周1月9日-1月15日)。下面给你两种符合需求的写法:
方案一:匹配ISO标准周(周一到周日,和你的示例一致)
SELECT * FROM 你的实际表名 -- 记得替换成你的表名称 WHERE started_job_date >= date_trunc('week', now())::date AND started_job_date < date_trunc('week', now())::date + interval '7 days';
date_trunc('week', now())会返回当前周的周一零点(ISO周默认以周一为起始)- 加上7天后得到下周一零点,用
<而不是<=,能确保包含当前周最后一秒的所有数据(避免timestamp类型数据被截断)
方案二:如果你的周以周日为起始
如果业务里周是从周日到周六,调整成下面的写法:
SELECT * FROM 你的实际表名 WHERE started_job_date >= (date_trunc('week', now()) - interval '1 day')::date AND started_job_date < (date_trunc('week', now()) + interval '6 days')::date;
注意事项
- 不要用
BETWEEN:如果started_job_date是timestamp类型,BETWEEN ... AND now()会截止到查询执行的当前时间,而不是周的结束时间,用< 下一周起始的方式更精准。 - 必须补全
FROM子句:你原来的SQL缺少表名,执行会报错,记得替换成实际表名。
内容的提问来源于stack exchange,提问作者user8272537
相关产品推荐
相关产品推荐

