![](/img/trans.png)
[英]Syntax for comparison expression in Simple case expression in Oracle DB SQL
[英]Conditional Date Comparison and Assignment using Case expression in Oracle SQL
我是該網站和SQL的新手。 我需要一些有關案例表達的幫助。
要求如下:
我有一個帶有兩個日期列的表T1-eff和disc;
具有2個日期列的第二個表T2-on_date和off_date;
我試圖建立一個單例表達式,在這里我可以比較兩個表的日期列並根據某些條件分配值。
條件是:
•如果T1.eff和T2.disc日期設置為默認值,即T1.eff = 1/1/1970和T2.disc = 1970
Then set set T1.eff=T2.on_date and T2.disc=T2.off_date
•如果T1.eff> T2.on_date和T1.disc> T2.off_date
Then set T1.disc=T2.Off_date.
•如果T1.eff
Then set T1.eff=T2.On_date.
•如果T1.eff T2.off_date
Then set T1.eff=T2.On_date and T1.disc=T2.Off_date
•如果T1.eff> T2.on_date和T1.disc
Then do not update eff, disc dates, insert as is.
我開始編寫一個Case表達式,並且對如何構建/編寫代碼塊一無所知。 我需要將“ eff”和“ disc”日期作為一個條件進行比較,然后在單個大小寫表達式中將相應的值分別分配給“ eff”和“ disc”。
SELECT
CASE T1.EFF, T1.DISC
WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY')
THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF > T2.ON_DATE AND T1.DISC > T2.OFF_DATE
THEN T1.EFF = T1.EFF AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE
THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE
THEN T1.EFF = T1.EFF AND T1.DISC - T1.DISC
END,
T2.ON_DATE, T2.OFF_DATE
FROM T2, T1
WHERE T1.A = T2.B
等等。
我不確定是否可以在單個case表達式中獲取/使用兩列。
Oracle DB-客戶端版本:12.1.0.2.0
提前致謝! => VPPG
我認為您想要的是修改SELECT輸出中顯示的EFF
和DISC
的值。 使用單個case語句很難做到這一點,因為您想更改2列的輸出。 但是,如果您簡化邏輯,仍然可以使其保持簡單。
SELECT
CASE WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY')
THEN T2.ON_DATE
WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE
THEN T2.ON_DATE
ELSE T1.EFF
END as EFF,
CASE WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE
THEN T1.DISC
ELSE T2.OFF_DATE
END as DISC,
T2.ON_DATE, T2.OFF_DATE
FROM T2, T1
WHERE T1.A = T2.B;
另請注意,我使用的是CASE
表達式的另一種形式-有兩種使用方式。
如果這不能真正解決您的問題,請告訴我,我將更新答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.