2017-02-16 7 views
0

Ich versuche, eine Fallauswahl zu verwenden, wenn der Tag Montag ist (oder d ist gleich 2), und das 'Else' würde jeden anderen Tag der Woche behandeln.Wie lautet die Syntax für Wochentag?

Select to_char (sysdate, 'D') d from dual, 
/*if 2 or Monday then run this part*/ 
     CASE 
     2 
      Then 
      SELECT DISTINCT RPAD(CLAIM.CLAIM_NUMBER, 20) || 
        LPAD(CLAIM.CLAIM_ID, 15, '0') || 
        TO_CHAR(CLAIM.INCIDENT_DATE, 'MMDDYYYY') || 
        LPAD(' ',2) || 
        'D' 
       FROM CLAIM,CLAIMANT,INSURER,POLICY 
      WHERE CLAIM.CLAIM_ID = CLAIMANT.CLAIM_ID 
       AND POLICY.INSURER_NUMBER = INSURER.INSURER_NUMBER 
       AND INSURER.INSURER_NUMBER NOT IN ('7','8') 
       AND CLAIMANT.EXAMINER1_CODE NOT IN ('MAYCONV') 
       AND CLAIM.INSURANCE_TYPE = 2 
       AND CLAIM.JURISDICTION_CODE <> 1 
       AND CLAIMANT.CLAIMANT_TYPE_CODE in (4,7) 
       /*if Monday then go 2 days back*/ 
       AND CLAIMANT.EDIT_DATE > (SYSDATE - 2) 

/*if not equal to 2 or any day but Monday then run this part*/    
       Else 
       SELECT DISTINCT RPAD(CLAIM.CLAIM_NUMBER, 20) || 
        LPAD(CLAIM.CLAIM_ID, 15, '0') || 
        TO_CHAR(CLAIM.INCIDENT_DATE, 'MMDDYYYY') || 
        LPAD(' ',2) || 
        'D' 
       FROM CLAIM,CLAIMANT,INSURER,POLICY 
      WHERE CLAIM.CLAIM_ID = CLAIMANT.CLAIM_ID 
       AND POLICY.INSURER_NUMBER = INSURER.INSURER_NUMBER 
       AND INSURER.INSURER_NUMBER NOT IN ('7','8') 
       AND CLAIMANT.EXAMINER1_CODE NOT IN ('MAYCONV') 
       AND CLAIM.INSURANCE_TYPE = 2 
       AND CLAIM.JURISDICTION_CODE <> 1 
       AND CLAIMANT.CLAIMANT_TYPE_CODE in (4,7) 
       /*if not Monday then go 1 day back*/ 
       AND CLAIMANT.EDIT_DATE > (SYSDATE - 1) 
/
+1

Side Problem, aber Sie sollten sich bewusst sein, dass [NLS-Einstellungen die Tageszahl beeinflussen] (http://stackoverflow.com/a/14518463/266304); jemand anders, der den Code in einem anderen Gebietsschema ausführt, sieht möglicherweise ein anderes Ergebnis. –

Antwort

1

ich nicht folgen Sie den Code genau, aber es scheint, dass Sie nur die letzte Bedingung am Tag der Woche in Ihrer where Klausel wollen abhängen.

Wenn ja, benötigen Sie etwas (ACHTUNG: Ich habe nichts anderes im Code überprüft, um sicherzustellen, dass es korrekt oder effizient ist!) - Die einzige Änderung ist in der letzten Zeile. Sie brauchen nicht die select... from dual und Sie müssen nur die select Anweisung einmal schreiben.

SELECT DISTINCT RPAD(CLAIM.CLAIM_NUMBER, 20) || 
        LPAD(CLAIM.CLAIM_ID, 15, '0') || 
        TO_CHAR(CLAIM.INCIDENT_DATE, 'MMDDYYYY') || 
        LPAD(' ',2) || 
        'D' 
       FROM CLAIM,CLAIMANT,INSURER,POLICY 
      WHERE CLAIM.CLAIM_ID = CLAIMANT.CLAIM_ID 
       AND POLICY.INSURER_NUMBER = INSURER.INSURER_NUMBER 
       ............ 
AND CLAIMANT.EDIT_DATE > SYSDATE - case to_char(sysdate, 'd') when 2 then 2 else 1 end 
+0

Vielen Dank! – johnrm

Verwandte Themen