在DB2中,是否可以将WEDNESDAY视为周的开始TUESDAY视为周的结束?我使用了WEEK函数,但是它把MONDAY到SUNDAY视为一周。下面是查询带来的每个星期的数据,即周一到周日。
select column1, sum(column2) from TABLE where
(readingdate >= DATE ('2020-04-01') AND readingdate < DATE ('2020-04-30') +
1 DAY)
group by column1, week(readingdate);
下面是示例数据
没有内置的日期函数。你需要创建自己的函数,或表达式。
此外,你需要考虑边缘情况。 一年中的第一周和最后一周。
这里有一个例子,你可以做什么... ... 我做了一些假设,比如:我应该推迟一周的开始时间?我应该推迟一周的开始时间吗? 我选择了推迟。
db2 "WITH D (myday) AS (
values ('2019-12-30'), ('2019-12-31'), ('2020-01-01'), ('2020-01-02'), ('2020-01-03'),
('2020-01-04'), ('2020-01-05'), ('2020-01-06'), ('2020-01-07'), ('2020-01-08'),
('2020-01-09'), ('2020-01-10'), ('2020-01-11'), ('2020-01-12'), ('2020-01-13'),
('2020-01-14'), ('2020-01-15'), ('2020-01-16'), ('2020-01-17'), ('2020-01-18')
)
select myday, varchar(dayname(myday), 10) name, dayofweek(myday) dayofweek, week(myday) week,
CASE
WHEN dayofweek(myday) < 4 THEN ( CASE WHEN WEEK(myday) = 1
THEN week(date(myday) - dayofweek(myday) days)
ELSE WEEK(myday) -1
END )
ELSE WEEK(myday)
END week_for_Wed
from D"
MYDAY NAME DAYOFWEEK WEEK WEEK_FOR_WED
---------- ---------- ----------- ----------- ------------
2019-12-30 Monday 2 53 52
2019-12-31 Tuesday 3 53 52
2020-01-01 Wednesday 4 1 1
2020-01-02 Thursday 5 1 1
2020-01-03 Friday 6 1 1
2020-01-04 Saturday 7 1 1
2020-01-05 Sunday 1 2 1
2020-01-06 Monday 2 2 1
2020-01-07 Tuesday 3 2 1
2020-01-08 Wednesday 4 2 2
2020-01-09 Thursday 5 2 2
2020-01-10 Friday 6 2 2
2020-01-11 Saturday 7 2 2
2020-01-12 Sunday 1 3 2
2020-01-13 Monday 2 3 2
2020-01-14 Tuesday 3 3 2
2020-01-15 Wednesday 4 3 3
2020-01-16 Thursday 5 3 3
2020-01-17 Friday 6 3 3
2020-01-18 Saturday 7 3 3
20 record(s) selected.
你看,这一年是有趣的。(再次,边缘案例)因为1月1日是星期三。 也许这就是为什么你要问它。所以,上一年(2019年)从53周减少到52周。 我不确定这是否正确).再次,边缘案例......。
谨慎使用。
根据提供的少数信息,这将做工作
week(date('2020-05-20')- 3 days)