Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL-跨年份获得一致的年-周对_Postgresql_Date_Datetime_Postgresql 10 - Fatal编程技术网

PostgreSQL-跨年份获得一致的年-周对

PostgreSQL-跨年份获得一致的年-周对,postgresql,date,datetime,postgresql-10,Postgresql,Date,Datetime,Postgresql 10,我一直在绞尽脑汁寻找在PostrgeSQL中检索一致(年、周)对的解决方案 在研究了该问题后,尤其是在: 按日期部分(“年”,x)分组,日期部分(“周”,x)最有可能 不是用户想要的,应该被认为是不正确的。对于 示例2017年的第一天仍然是从2017年开始的第52周的一部分 2016年,因此(2017,52)对可能根本不是你想要的 2017年底前的需求。在上使用“日期('week',x)` 另一只手的作用正如人们所期望的那样 我尝试了date\u trunc和date\u part的组合。然而,

我一直在绞尽脑汁寻找在PostrgeSQL中检索一致(年、周)对的解决方案

在研究了该问题后,尤其是在:

按日期部分(“年”,x)分组,日期部分(“周”,x)最有可能 不是用户想要的,应该被认为是不正确的。对于 示例2017年的第一天仍然是从2017年开始的第52周的一部分 2016年,因此(2017,52)对可能根本不是你想要的 2017年底前的需求。在上使用“日期('week',x)` 另一只手的作用正如人们所期望的那样

我尝试了
date\u trunc
date\u part
的组合。然而,似乎没有一个能给出一致的结果

例如:考虑这两个不同年份之间的日期:<代码> 2017—01-01’< /C>和<代码> 2020—01-01’< /代码> ./P> 我认为正确的(年、周)配对应该是

(2016,52)
(2020,1)

我不知道如何编写一个SQL语句来给出这两个结果

我试过:

一,


  • 无论哪种方式,总有一些错误,我可能想要一些能够给出正确结果的东西。我的问题是,当我按年度和周进行分组时,这种方式有时会考虑超过7天,我需要避免这种情况。

    周单元返回一个基于ISO标准的周数。使用
    isoyear

    SELECT date_part('isoyear', TIMESTAMP '2017-01-01 00:00:00'), 
           date_part('week', TIMESTAMP '2017-01-01 00:00:00'),
           date_part('isoyear', TIMESTAMP '2020-01-01 00:00:00'), 
           date_part('week', TIMESTAMP '2020-01-01 00:00:00'); 
    
    返回:

    date|u part | date|u part | date|u part
    ----------+-----------+-----------+----------
    2016 |        52 |      2020 |         1
    
    太好了,6分钟后我可以接受你的回答。非常感谢;)
    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
    
    SELECT date_part('isoyear', TIMESTAMP '2017-01-01 00:00:00'), 
           date_part('week', TIMESTAMP '2017-01-01 00:00:00'),
           date_part('isoyear', TIMESTAMP '2020-01-01 00:00:00'), 
           date_part('week', TIMESTAMP '2020-01-01 00:00:00');