簡體   English   中英

在Oracle 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輸出中顯示的EFFDISC的值。 使用單個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.

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