Проверьте, находится ли юбилейный месяц в диапазоне месяцев - PullRequest
0 голосов
/ 01 февраля 2011

Я пытаюсь выполнить какую-то другую логику в хранимой процедуре при обработке месяца годовщины.Использование простого IF(anniversary = MONTH(x)) прекрасно работает, когда обрабатывается только один месяц.

Однако, когда обрабатывается несколько месяцев, необходимо выполнить различную логику, если месяц годовщины находится между началом месяца и месяцем окончания.IF(anniversary BETWEEN MONTH(x) AND MONTH(y)) не будет работать в течение нового года (т. Е. С сентября по январь).

Поле годовщины в настоящее время генерируется как MONTH(contract_start), но это можно изменить (ранее оно использовалось MONTHNAME() до того, как японятия не имею почему).

Я думал, что для anniversary было бы хорошей идеей стать логическим значением, чтобы сделать функцию IF более читабельной.

1 Ответ

0 голосов
/ 01 февраля 2011

Хорошо, я решил это.Это было просто, когда я записал алгоритм в псевдокоде, я создал функцию для хранения логики, но при необходимости довольно легко превратить ее в выражение.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...