如何在PostgreSQL中为波斯历将每周首日设为周六(无配置权限)
解决波斯历周(周六为首日)的记录筛选问题
由于PostgreSQL默认的DATE_TRUNC('week', ...)遵循系统全局周起始设置,无法修改配置的情况下,需要手动计算波斯历周(周六为首日)的时间区间来筛选数据。
替换原WHERE语句为以下内容:
WHERE ("tasks"."finished_date")::DATE >= (DATE_TRUNC('day', NOW()) - INTERVAL '1 day' * ((EXTRACT(DOW FROM NOW()) + 1) % 7)) AND ("tasks"."finished_date")::DATE < (DATE_TRUNC('day', NOW()) - INTERVAL '1 day' * ((EXTRACT(DOW FROM NOW()) + 1) % 7) + INTERVAL '7 days')
语句逻辑说明
EXTRACT(DOW FROM NOW()):获取当前日期在一周中的索引(0=周日,1=周一,…,6=周六)(EXTRACT(DOW FROM NOW()) + 1) % 7:将索引调整为周六对应0,周日到周五对应1-6,方便计算与最近周六的天数差DATE_TRUNC('day', NOW()) - INTERVAL '1 day' * ...:通过减去对应天数,得到当前波斯历周的首日(周六)- 加7天得到下周周六,用
<确保筛选范围不包含下周的日期
内容的提问来源于stack exchange,提问作者okaeiz
相关产品推荐
相关产品推荐

