2017-02-16 6 views
0

나는 그 날이 월요일 (또는 d가 2와 같다)이고, '그 외의 사람'이 그 요일을 격일로 처리한다면 사건 선택을 사용하려하고있다.요일 선택 사례의 구문은 무엇입니까?

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

부작용이 있지만 [NLS 설정이 날 번호에 영향을 미침] (http://stackoverflow.com/a/14518463/266304); 다른 로케일에서 코드를 실행하는 다른 사람이 다른 결과를 볼 수 있습니다. –

답변

1

나는 밀접하게 코드를 수행하지 않았다, 그러나 당신이 당신의 where 절에 마지막 조건은 요일에 의존 할 것으로 보인다.

그렇다면 (경고 : 코드에서 정확하거나 효율적인지 확인하기 위해 다른 것을 확인하지 않았습니다!) - 유일한 변경은 마지막 줄에 있습니다. select... from dual이 필요하지 않으며 select 문을 한 번만 작성하면됩니다.

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

대단히 감사합니다! – johnrm