PostgreSQL:如何在sql查询中将date_trunc周开始日从星期一更改为另一天?

问题描述 投票:0回答:4

我想在我的日期时间列上使用 PostgreSQL 中的

date_trunc
函数来聚合一周内的数据。

例如我需要获得每周的销售数量。

问题是

date_trunc('week', datetime_column)
函数将星期一视为一周的开始日,而我的一些客户在日历中使用不同的开始日(例如星期六)。

我试过了

 SELECT date_trunc('WEEK',(time_id + interval '2 day'))- interval '2 day' AS WEEK

但这很混乱,我认为必须有更好的方法。

sql postgresql weekday
4个回答
3
投票

我需要一种更干净、更简单的方法来 tranc_date 周与任何一周的开始日,但考虑到提供的解决方案,我认为我的查询是目前最好的解决方案。

我认为我可以创建一个函数以使其更具可读性,但我仍然想要一种方法来防止对每条记录执行 2 次数学运算。

我将使我的代码成为解决方案,但我很高兴知道是否有办法使我的查询更快。

 SELECT date_trunc('WEEK',(time_id + interval '2 day'))- interval '2 day' AS WEEK

1
投票

试试这个

select
    datetime_column
    - extract(isodow from datetime_column) + 3  -- 3 is the weekday number to which we want to truncate
    - cast(extract(isodow from datetime_column) < 3 as int) * 7  -- 3 is the weekday number to which we want to truncate
from
    <table_name>

0
投票

尝试%(除法的余数)

select i,
       now() + make_interval(days := i) "timestamp",
       extract(dow from now() + make_interval(days := i)) day_of_week,
       (extract(dow from now() + make_interval(days := i))::int+3)%7 day_of_week_shift
    from
        generate_series(0, 6) i

0
投票

我不了解 PostgreSQL,但在 BigQuery 中它就像这样简单:

选择 DATE_TRUNC(日期,周(星期三))

*将星期三替换为您希望开始日期的任何其他日期。

© www.soinside.com 2019 - 2024. All rights reserved.