日期计算在 Oracle SQL 案例语句中不起作用?

Posted

技术标签:

【中文标题】日期计算在 Oracle SQL 案例语句中不起作用?【英文标题】:Date calculation not working in Oracle SQL Case Statement? 【发布时间】: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

【问题讨论】:

案例表达式,不是陈述。 你能提供样本数据和想要的结果吗?我不确定我是否完全理解“我正在尝试将数据集的一周开始时间从星期一更改为上一个星期五。” 是的,我已将其添加到问题中。 【参考方案1】:

问题是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') 

【讨论】:

感谢您的回答!你是对的 SELECT '' from dual;返回

以上是关于日期计算在 Oracle SQL 案例语句中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

比较两个日期Oracle的多案例

WHERE 语句在应该更新数据的 SQL 中不起作用[关闭]

案例语句在 PSQUERY Where 子句中不起作用

在 Case 语句中使用计算 - Oracle SQL

选择 case 语句在 oracle 中不起作用

案例条件在 apex 日历和 sql 开发人员中不起作用