簡體   English   中英

日期計算在Oracle SQL Case Statement中不起作用?

[英]Date calculation not working in Oracle SQL Case Statement?

我試圖將數據集的一周的開始從星期一更改為上一個星期五。 總體數據將匯總到一周的水平,如下所示。

第一周

星期五,星期六,星期日,星期一,星期二,星期三,星期四

為此,我想出的最好的方法是將個案設置為周五,周六和周日為下周的第一天(系統的第一天為周一,最后一天為周日)。

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

我的代碼邏輯是:如果Fri,Sat或Sun,則找到一周的第一天,並在下周的第一天加上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

問題是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') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM