У меня есть заявление IF THEN ELSE
в одном из моих хранимых продуктов.Почему «INTERVAL» не является допустимым синтаксисом в инструкции IF
if (DAYOFWEEK((SELECT DATE_ADD(_todaydate, INTERVAL (_sign * offset.value) DAY)))=7)
then
SELECT DATE_ADD(daytemp, INTERVAL (_sign * offset.value + 2) DAY) into `day`;
elseif (DAYOFWEEK((SELECT DATE_ADD(_todaydate, INTERVAL _sign * offset.value DAY)))=1)
then
SELECT DATE_ADD(daytemp, INTERVAL (_sign * offset.value + 1) DAY) into `day`;
else
Select (SELECT DATE_ADD(_todaydate, INTERVAL _sign * offset.value DAY)) into `day`;
END if;
где _todaydate
сегодняшняя дата, _sign
либо +1
или -1
в зависимости от того, если вы хотите, чтобы найти дни в будущем или в прошлом и offset
ряда ИНТ показывает, сколько дней от _todaydate
.
Запрос предназначен для возврата меня рабочий день или в прошлом или в будущем в зависимости от _sign * offset.value
, но проблема в том, что SQL возвращает мне ошибку, говоря, что "unexpected INTERVAL (interval) in the if statement"
Я не знаю, почему я получаю эту проблему потому что сам запрос выглядит хорошо. Может кто-нибудь смотрите, что мне не хватает ...
Дополнительная информация:
Я это IF заявление в «Select From» заявление, что могли бы быть случай, что эта ошибка происходит?
Привет, spencer7593, спасибо за ваше предложение, я думаю, что вы предлагаете лучше, спасибо, я попробую это. – Nia
Одна проблема с кодом в моем ответе выше. Я замечаю, что в оригинале это 'DATE_ADD (_todaydate, ...)', который отличается от 'DATE_ADD (daytemp, ...)' в двух других условиях. Я пропустил это в своем переписывании. (Непонятно, почему это было бы иначе. Если это так, то я бы добавил другую переменную процедуры и назначил либо «daytemp», либо «_todaydate» в условном тесте, а затем ссылался на новую переменную только один SELECT, чтобы получить «день». – spencer7593