【发布时间】:2018-06-24 07:14:12
【问题描述】:
使用 PostgreSQL 9.4.18 版,PostGIS 2.2 版 我正在使用这个函数,并且我正在使用 WW 因为不想要 ISO 周数...只是从 1 月 1 日开始的周数:
CREATE FUNCTION f_woy(timestamp with time zone) RETURNS int LANGUAGE sql
IMMUTABLE AS $$SELECT to_char($1, 'WW')::int$$;
当我运行以下查询时,每 4 年,周数会发生变化,这是闰年。我试图在某个日期每年获得一致的周数。所以,例如,当我跑步时
SELECT f_woy(('2007-06-24 14:19:46.502-07'::timestamp at time zone 'UTC' at
time zone 'america/los_angeles')::date)
作为 2004、2005、2006 和 2007 年的 woy,我得到:
woy integer
25
但是当我运行它时:
SELECT f_woy(('2008-06-24 14:19:46.502-07'::timestamp at time zone 'UTC' at
time zone 'america/los_angeles')::date)
我明白了
woy integer
26
有没有办法我可以忽略闰年并保持一切一致,以便所有 06-24 都是第 25 周。我看到一些关于确定是否是闰年的帖子,但我有很难集成该逻辑,以便我可以将其应用于我正在检查周数的所有查询。
【问题讨论】:
-
我不明白你在找什么。我知道的所有周数定义(ISO 或非 ISO,从星期日或星期一开始的星期)都无法实现一年中的同一天具有相同的周数。这与闰年无关。它还会影响一月和二月的日期。这与年份从不同的工作日开始这一事实有关。
-
1 月 1-7 日...第 1 周。1 月 8-14 日...第 2 周。1 月 15-21 日...第 3 周。这是我一直在寻找的一致性。我想忽略 2 月 29 日,这会破坏一致性。我不在乎一年的星期几开始。 1 月 1 日至 7 日始终是第 1 周。12 月 25 日至 31 日始终是第 52 周。
标签: sql postgresql