我正在尝试在处理周年纪念日时在存储过程中执行一些不同的逻辑。使用简单的IF(anniversary = MONTH(x))
只需处理一个月即可正常工作。
但是,当处理多个月时,如果周年月份在开始月份和结束月份之间,则需要执行不同的逻辑。 IF(anniversary BETWEEN MONTH(x) AND MONTH(y))
将无法在新的一年(即9月至1月)工作。
周年纪念字段目前生成为MONTH(contract_start)
,但可以更改(之前使用的是MONTHNAME()
,我不知道为什么)。
我认为anniversary
成为布尔值可能是一个好主意,以使IF函数更具可读性。
答案 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