2017-12-15 4 views
2

Ich habe die folgende Tabelle: Ich suche die Tage zwischen FirstDate und EndDate, aber wenn EndDate = 09/09/9000 verwenden Sie sysdate.Case Expression mit ABS

Tabelle C

FirstDate  EndDate  id 
12/28/15  09/09/9000  1 

habe ich die folgenden, das funktioniert aber gibt es einen besseren Weg, dies zu schreiben?

SELECT DISTINCT 
id, 
ABS(TO_DATE(C.FirstDate) - TO_DATE(C.EndDate)) AS Between_days 

     FROM (SELECT id, FirstDate, 
      CASE WHEN TO_CHAR(C2.EndDate,'MM/DD/YYYY') = '09/09/9000' THEN TRUNC(SYSDATE) 
       ELSE C2.EndDate 
       END AS EndDate, 
       C2.ID,     
       FROM tableC C2) C 

Antwort

1

Sie können es ohne die abgeleitete Tabelle schreiben:

SELECT DISTINCT 
    id, 
    CASE WHEN TO_CHAR(EndDate,'MM/DD/YYYY') = '09/09/9000' 
     THEN ABS(TO_DATE(FirstDate) - TRUNC(SYSDATE)) 
     ELSE ABS(TO_DATE(FirstDate) - TO_DATE(EndDate)) 
    END as Between_days 
FROM tableC 
+0

Ja, danke! – John