在DB2中,将周中作为起始周。

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

在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); 

下面是示例数据

data

db2
1个回答
0
投票

没有内置的日期函数。你需要创建自己的函数,或表达式。

此外,你需要考虑边缘情况。 一年中的第一周和最后一周。

这里有一个例子,你可以做什么... ... 我做了一些假设,比如:我应该推迟一周的开始时间?我应该推迟一周的开始时间吗? 我选择了推迟。

    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周。 我不确定这是否正确).再次,边缘案例......。

谨慎使用。


1
投票

根据提供的少数信息,这将做工作

week(date('2020-05-20')- 3 days)
© www.soinside.com 2019 - 2024. All rights reserved.