我正在尝试将数据集的周开始从周一更改为上周五。整体数据将汇总到一周,看起来像这样。
星期五 星期六, 星期日, 星期一, 星期二, 星期三, 周四
我能做到的最好的是一个案例陈述,它将星期五,星期六和星期日设定为下周的第一天(系统的第一天是星期一,最后一天是星期日)。
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
所以上面你可以看到我希望Firday /周六/周日进入下周。
这是当前系统日期/周,
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
答案 0 :(得分:2)
问题是TO_CHAR(TRANSACTIONDATE, 'DAY')
使用'DAY'
时,工作日名称将填充空格字符。请尝试SELECT '<'||TO_CHAR(DATE '2018-05-07', 'DAY')||'>' from dual;
查看效果。
函数TO_CHAR(..., 'DAY')
根据当前用户会话NLS_DATE_LANGUAGE
设置返回工作日名称。这可能是英语,也可能不是。
将表达式更改为
TO_CHAR(TRANSACTIONDATE, 'fmDAY', 'NLS_DATE_LANGUAGE=american') IN ('FRIDAY', 'SATURDAY', 'SUNDAY')