2011-02-01 124 views
0

我正在嘗試在處理週年月份時在存儲過程中執行一些不同的邏輯。僅處理一個月時,使用簡單的IF(anniversary = MONTH(x))就可以正常工作。檢查週年月是否在幾個月的範圍內

但是,當處理多個月時,如果週年月在開始月份和結束月份之間,則需要執行不同的邏輯。 IF(anniversary BETWEEN MONTH(x) AND MONTH(y))在新的一年(即九月至一月)將不起作用。

週年紀念字段當前生成爲MONTH(contract_start),但是這可以改變(之前使用MONTHNAME(),我不知道爲什麼)。

我想這可能是一個好主意,anniversary成爲一個布爾值,使IF函數更具可讀性。

回答

0

好吧,我解決了這個問題。這很簡單,我用僞代碼寫下了算法 我創建了一個函數來存儲邏輯,但是如果需要的話,將它轉換爲表達式相當容易。

BEGIN 
IF min != max 
THEN 
    IF YEAR(min) != YEAR(max) 
    THEN 
     IF MONTH(born) BETWEEN MONTH(min) AND 12 
     OR MONTH(born) BETWEEN 1 AND MONTH(max) 
      THEN RETURN 1; 
      ELSE RETURN 0; 
      END IF; 
     ELSEIF MONTH(born) BETWEEN MONTH(min) AND MONTH(max) 
      THEN RETURN 1; 
      ELSE RETURN 0; 
     END IF; 
    ELSEIF MONTH(born) = MONTH(min) 
    THEN RETURN 1; 
    ELSE RETURN 0; 
END IF; 
END