2014-02-28 27 views
-1

我有開始和結束日期的數據,有時結束日期不得不一空,現在如果date =「」設置日期temporaraly到SYSDATE

'0000-00-00' 

我有一個查詢,說:

UPDATE w_preletter as L INNER JOIN w_prov_sensitive AS P ON L.IRS_TAX_ID = P.TAX_ID 
set L.sensitive_provider = '1', L.OFFSET_RESTRICTED = P.OFFSET_RESTRICTED 
where L.DATE_OF_SERVICE_BEG between P.BEGIN_DATE AND P.END_DATE; 

但如果日期是'0000-00-00'這意味着它仍然有效,所以我需要它暫時考慮它sysdate,否則它不會考慮中間的日期。那語法是什麼? 我不知道它是否是一個案例陳述,如果是的話我會如何寫出來。

+0

爲什麼不給樣品數據和希望的結果? –

回答

0

試試這個

UPDATE w_preletter as L INNER JOIN w_prov_sensitive AS P ON L.IRS_TAX_ID = P.TAX_ID 
set L.sensitive_provider = '1', L.OFFSET_RESTRICTED = P.OFFSET_RESTRICTED 
where L.DATE_OF_SERVICE_BEG between P.BEGIN_DATE AND P.END_DATE 
or (L.DATE_OF_SERVICE_BEG >= P.BEGIN_DATE AND P.END_DATE = '0000-00-00') 
0
  • 創建一個包含w_prov_sensitive所有行的臨時表(CREATE TABLE ... SELECT語法)
  • 更新臨時表中設置的所有END_DATE對NOW(),如果他們0 /空/不管
  • 通過加入對臨時表

你可以Al那樣的UPDATE所以把布爾邏輯工作,並使用一個複雜的WHERE子句。

where 
    (P.END_DATE != 0 and L.DATE_OF_SERVICE_BEG between P.BEGIN_DATE AND P.END_DATE) 
    OR (P.END_DATE = 0 and L.DATE_OF_SERVICE_BEG between P.BEGIN_DATE AND NOW())