简体   繁体   English

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

[英]PostgreSQL: How change date_trunc week start day from monday to another day in sql query?

I want to use date_trunc function in PostgreSQL on my datetime column to aggregate data in a week. 我想在PostgreSQL的datetime列上使用date_trunc函数来汇总一周内的数据。

For example I need to get number of sales each week. 例如,我需要获取每周的销售数量。

The problem is date_trunc('week', datetime_column) function considers Monday as the week start day and some of my customers user different start day in calendar (like Saturday). 问题是date_trunc('week', datetime_column)函数将星期一视为星期开始日期,而我的某些客户用户在日历中使用了不同的开始日期(例如星期六)。

I tried 我试过了

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

but it's messy and I think there must be a better way. 但这很麻烦,我认为必须有更好的方法。

try this one 试试这个

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>

try % (remainder of division) 尝试%(除法除法)

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

I needed a cleaner and easier way to tranc_date week with any week start day but considering provided solution I think my query is the best solution right now. 我需要一种更清洁,更轻松的方法来将tranc_date转换为星期几,但是考虑到提供的解决方案,我认为我的查询现在是最好的解决方案。

I think I can create a function to make it more readable but I still want a way to prevent performing 2 math operation for each record. 我想我可以创建一个函数使其更具可读性,但是我仍然想要一种方法来防止对每条记录执行2次数学运算。

I will make my code the solution but I would be glad to know if there is a way to make my query faster. 我将使代码成为解决方案,但我很高兴知道是否有一种方法可以使查询更快。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM