检查周年纪念日是否在几个月的范围内

时间:2011-02-01 12:29:10

标签: mysql stored-procedures

我正在尝试在处理周年纪念日时在存储过程中执行一些不同的逻辑。使用简单的IF(anniversary = MONTH(x))只需处理一个月即可正常工作。

但是,当处理多个月时,如果周年月份在开始月份和结束月份之间,则需要执行不同的逻辑。 IF(anniversary BETWEEN MONTH(x) AND MONTH(y))将无法在新的一年(即9月至1月)工作。

周年纪念字段目前生成为MONTH(contract_start),但可以更改(之前使用的是MONTHNAME(),我不知道为什么)。

我认为anniversary成为布尔值可能是一个好主意,以使IF函数更具可读性。

1 个答案:

答案 0 :(得分: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