如何在PostgreSQL中更改一周的开始

问题描述

我正在尝试创建一个包含星期数以及该周的第一个和最后一个日期的字符串,如下所示:

'W41 04 / 10-10 / 10'

我能够在Google表格上创建一个解决我的问题的公式,现在我需要在PostgreSQL上执行此操作。

问题是我们在报告中将星期日用作一周的第一天,而PostgreSQL将星期一用作第一天。

所以对于PostgreSQL第41周,从05/10到11/10,我需要从04/10到10/10

我的问题是:是否也可以更改PostgreSQL的第一天?我创建了一个代码,可以根据需要创建该字符串,但是由于该定义,星期数是错误的。

编辑:

我已使用以下代码纠正了星期几:

ceil(((cte.data::date -((CAST(EXTRACT (year FROM  cte.data) as
text)||'-01-04')::date - CAST
               (EXTRACT (isodow FROM  (CAST(EXTRACT (year FROM  cte.data) as
text)||'-01-04')::date)
               as integer)
               ))+1)/7.0)

现在,星期数就出现了,就像我需要的,例如04/10是第41周 现在,我需要根据此日期获得第一个和最后一个日期,到目前为止的结果是:

Result Sample

解决方法

您可以将DATE_TRUNCTO_CHAR函数一起使用

SELECT TO_CHAR(current_date,'"W"IW ')|| 
       TO_CHAR(DATE_TRUNC('week',current_date),'DD/MM - ')||
       TO_CHAR(DATE_TRUNC('week',current_date)+ INTERVAL '6 day','DD/MM')

并更改+ INTERVAL 'c day'(在这种情况下为c=0是隐含的c=6)内的附加值,以使这些常量之间的差如果您想更改结果中的一周的第一天/最后几天,请设为6

Demo

,

经过研究和思考,我使用此代码来获取所需的星期数

ceil(((cte.data::date -((CAST(EXTRACT (year FROM  cte.data) as
text)||'-01-04')::date - CAST
               (EXTRACT (isodow FROM  (CAST(EXTRACT (year FROM  cte.data) as
text)||'-01-04')::date)
               as integer)
               ))+1)/7.0)

然后给我一个别名'num',并以此方式计算第一个和最后一个日期:

'W' || num ||
            to_char(to_date('20200101','YYYYMMDD')+  (num*7)-10,' DD/MM - ')  ||
            to_char(to_date('20200101','YYYYMMDD')+  (num*7)-4,'DD/MM') as WEEK

最终输出是星期几,其起始和结束日期都以星期日作为一周的第一天

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...