如何在Postgres中查询黑色星期五的具体日期
可以直接通过PostgreSQL内置的日期函数计算得到指定年份或历年的黑色星期五日期,无需预先存储日期数据,具体实现方法如下:
1 查询指定年份的黑色星期五
将SQL中的:target_year替换为你要查询的具体年份即可:
WITH nov_end AS ( -- 生成目标年份11月的最后一天 SELECT (date_trunc('year', make_date(:target_year, 1, 1)) + INTERVAL '11 months' - INTERVAL '1 day')::date AS dt ) SELECT dt - ( (EXTRACT(DOW FROM dt)::int + 2) % 7 ) AS black_friday FROM nov_end;
2 批量查询历年的黑色星期五
如果需要查询多个年份的黑五日期,直接生成年份序列即可,以下示例查询2010年到2030年的所有黑五日期,年份范围可自行调整:
SELECT year, nov_end - ( (EXTRACT(DOW FROM nov_end)::int + 2) % 7 ) AS black_friday FROM ( -- 自定义年份查询范围 SELECT generate_series(2010, 2030) AS year ) years CROSS JOIN LATERAL ( SELECT (date_trunc('year', make_date(year, 1, 1)) + INTERVAL '11 months' - INTERVAL '1 day')::date AS nov_end ) nov_dates ORDER BY year;
- 计算逻辑说明:我们先获取对应年份11月的最后一天,再根据该日期的星期偏移量,往前推到最近的周五,得到的结果就是当年11月最后一个周五,也就是黑色星期五,验证下来结果和实际黑五日期完全一致。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

