我有以下查詢,它給出了當前日期。出于這個原因,我想將值作為字串回傳TO_CHAR。
select NVL(TO_CHAR(sysdate,'DD.MM.YYYY'),0) from dual
但我需要確定日期,并基于此它應該回傳前一個日期。例如,當查詢在每周一運行時,它應該回傳上周五的日期。當查詢從周二到周五運行時,它應該回傳前一天的日期。
例如,當查詢今天運行時,它應該回傳上周五的日期,即18.02.2022。當查詢運行 tommorow 時,它應該從 Today 回傳日期21.02.2022。
我想避免每個星期六和星期日的日期。我們可以在一個查詢中做到這一點嗎?
uj5u.com熱心網友回復:
如果您想這樣做以便查詢可以在任何語言和/或地區作業,那么您可以將日期與 ISO 周的開始進行比較:
SELECT TO_CHAR(SYSDATE, 'DD.MM.YYYY') AS today,
CASE TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW')
WHEN 0 THEN TO_CHAR(SYSDATE - 3, 'DD.MM.YYYY') -- Monday
WHEN 6 THEN TO_CHAR(SYSDATE - 2, 'DD.MM.YYYY') -- Sunday
ELSE TO_CHAR(SYSDATE - 1, 'DD.MM.YYYY') -- Any other day
END AS previous_weekday
FROM DUAL;
db<>在這里擺弄
uj5u.com熱心網友回復:
作為 MTO 答案的一個細微變化,只是為了讓未來的維護者更清楚,您可以使用日期名稱或縮寫來代替 - 但需要指定日期語言(這可能假設假設的未來維護者使用,或者至少理解,該語言):
select to_char(sysdate
- case to_char(sysdate, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
when 'MON' then 3
when 'SUN' then 2
else 1
end, 'DD.MM.YYYY') as result
from dual
RESULT
----------
18.02.2022
db<>fiddle,包括您在 14 天內看到的內容,而不僅僅是今天。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430056.html
上一篇:SQL:在列之間替換值
