【发布时间】:2018-05-02 09:51:28
【问题描述】:
我正在尝试将数据集的一周开始时间从星期一更改为上一个星期五。整体数据将汇总到一周级别,如下所示。
第 1 周
星期五, 周六, 星期日, 周一, 周二, 周三, 星期四
我想出的最好的方法是一个案例陈述,它将星期五、星期六和星期日设置为下周的第一天(系统第一天是星期一,最后一天是星期日)。
SELECT TRANSACTIONDATE,
CASE
WHEN TO_CHAR(TRANSACTIONDATE, 'DAY') IN ('FRIDAY', 'SATURDAY',
'SUNDAY') THEN (TRUNC(TRANSACTIONDATE, 'IW')+7)
ELSE TRUNC(TRANSACTIONDATE, 'IW')
END AS TEST
FROM TRANSACTIONS
我对这段代码的逻辑是:如果是周五、周六或周日,则找到一周的第一天并加上 7,返回下周的一周的第一天。
问题在于语句“TRUNC(TRANSACTIONDATE, 'IW')+7”没有在一周开始时增加 7 天。
当我查询时
select "TRUNC(TRANSACTIONDATE, 'IW')+7" from transactions
我得到了正确的下周开始。
这样从周五到周四的所有天数都在同一周数之下。
任何想法出了什么问题,或者是否有更好的方法来完成我所追求的?
谢谢, 汤姆
编辑**
第一个数据集是我想要实现的,
Date Day Week
4/1/2018 Monday 1
4/2/2018 Tuesday 1
4/3/2018 Wednesday 1
4/4/2018 Thursday 1
4/5/2018 Friday 2
4/6/2018 Saturday 2
4/7/2018 Sunday 2
4/8/2018 Monday 2
4/9/2018 Tuesday 2
4/10/2018 Wednesday 2
4/11/2018 Thursday 2
所以上面你可以看到我希望星期五/星期六/星期日落入下周。
这是当前系统的日期/周,
Date Day Week
4/1/2018 Monday 1
4/2/2018 Tuesday 1
4/3/2018 Wednesday 1
4/4/2018 Thursday 1
4/5/2018 Friday 1
4/6/2018 Saturday 1
4/7/2018 Sunday 1
4/8/2018 Monday 2
4/9/2018 Tuesday 2
【问题讨论】:
-
案例表达式,不是陈述。
-
你能提供样本数据和想要的结果吗?我不确定我是否完全理解“我正在尝试将数据集的一周开始时间从星期一更改为上一个星期五。”
-
是的,我已将其添加到问题中。
标签: sql oracle date case weekday