【发布时间】:2021-02-12 11:34:20
【问题描述】:
我一直在努力寻找在 PostrgeSQL 中检索一致(年、周)对的解决方案。
看了here的问题,特别是this comment:
按 date_part('year', x) 分组,date_part('week', x) 最有可能 不是用户想要的,应该被认为是不正确的。为了 例如,2017 年的第一天仍然是第 52 周的一部分,从 2016 年,因此 (2017, 52) 对可能根本不是你的 想要到 2017 年底。使用 'date_trunc('week', x)` on 另一只手按预期工作。
我尝试了date_trunc 和date_part 的组合。然而,似乎没有一个给出一致的结果。
例如:考虑不同年份之间的这两个日期:'2017-01-01' 和 '2020-01-01'。
我认为他们的正确(年、周)对应该是 (2016, 52) 和 (2020, 1)。
我不知道如何编写一个 SQL 语句来给出这两个结果。
我试过了:
1.
SELECT date_part('year', date_trunc('week', TIMESTAMP '2017-01-01 00:00:00')); --2016 OK
SELECT date_part('week', date_trunc('week', TIMESTAMP '2017-01-01 00:00:00')); --52 OK
SELECT date_part('year', date_trunc('week', TIMESTAMP '2020-01-01 00:00:00')); --2019 BUT I NEED 2020
SELECT date_part('week', date_trunc('week', TIMESTAMP '2020-01-01 00:00:00')); --1 OK
SELECT date_part('year', TIMESTAMP '2017-01-01 00:00:00'); --2017 BUT I NEED 2016
SELECT date_part('week', TIMESTAMP '2017-01-01 00:00:00'); --52 OK
SELECT date_part('year', TIMESTAMP '2020-01-01 00:00:00'); --2020 OK
SELECT date_part('week', TIMESTAMP '2020-01-01 00:00:00'); --1 OK
无论哪种方式,总会有问题,我可能想要一些可以给出正确结果的东西。我的问题是,当我按年和周分组时,有时我会考虑超过 7 天,我需要避免这种情况。
【问题讨论】:
标签: postgresql date datetime postgresql-10