PostgreSQL如何从基于当前日期生成的近1年日期序列中排除周末数据
日期过滤SQL修改方案
你可以在原有查询基础上增加星期判断的WHERE条件来过滤周末,修改后的完整语句如下:
SELECT to_char(date_trunc('day', (current_date - days)), 'YYYY-MM-DD') AS date FROM generate_series(0, 365, 1) AS days WHERE EXTRACT(ISODOW FROM (current_date - days)) NOT IN (6,7)
逻辑说明
- 我们用
EXTRACT(ISODOW FROM 日期)函数获取日期对应的星期序号,ISO标准下的星期序号规则为:1=周一、2=周二、3=周三、4=周四、5=周五、6=周六、7=周日 - 直接过滤掉序号为6、7的日期即可实现排除周末的需求
可选优化
如果需要严格覆盖完整1年的时长(避免平年365天、闰年366天的差异),可以把generate_series的参数调整为动态计算的间隔天数:
SELECT to_char(date_trunc('day', (current_date - days)), 'YYYY-MM-DD') AS date FROM generate_series(0, (current_date - (current_date - INTERVAL '1 year')::date), 1) AS days WHERE EXTRACT(ISODOW FROM (current_date - days)) NOT IN (6,7)
内容的提问来源于stack exchange,提问作者Lim
相关产品推荐
相关产品推荐

