我想在PostgreSQL的datetime列上使用date_trunc
函数来汇总一周内的数据。
例如,我每周需要获取销售数量。
问题是date_trunc('week', datetime_column)
函数将星期一视为星期开始日,而我的某些客户在日历中使用了不同的开始日(例如星期六)。
我尝试过
SELECT date_trunc('WEEK',(time_id + interval '2 day'))- interval '2 day' AS WEEK
但这很混乱,我认为必须有更好的方法。
答案 0 :(得分: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>
答案 1 :(得分: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
答案 2 :(得分:0)
我需要一种更清洁,更轻松的方法来将tranc_date转换为星期几,但是考虑到提供的解决方案,我认为我的查询现在是最好的解决方案。
我想我可以创建一个函数使其更具可读性,但是我仍然想要一种方法来防止对每条记录执行2次数学运算。
我将使代码成为解决方案,但我很高兴知道是否有一种方法可以使查询更快。
SELECT date_trunc('WEEK',(time_id + interval '2 day'))- interval '2 day' AS WEEK