2011-02-01 127 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