2016-09-19 1 views
0

Я пытаюсь создать событие в своей таблице, чтобы запускать каждые несколько минут, чтобы увидеть, является ли теперь next_run(), и если да добавить «frequency» в «next_run», но я получаю исключение синтаксиса каждый раз, когда я это делаю.Интервал MYSQL DATE_ADD как переменная ИЛИ из другого столбца

ниже структура таблицы ...

 LAST_RUN  |FREQUENCY| NEXT_RUN 
---------------------------------------------------- 
2016-09-15 06:02:06 | 1 DAY | 2016-09-15 06:02:06 

" и код, я использую это ...

UPDATE TASKS_MASTER_COPY 
@num:=CAST(FREQUENCY) AS UNSIGNED, 
@p :=SUBSTR(FREQUENCY, CHAR_LENGTH(@num)+2) 
LAST_RUN=NEXT_RUN, 
NEXT_RUN=NEXT_RUN + CASE 
     WHEN @p='YEAR' THEN DATE_ADD(NEXT_RUN, INTERVAL @num YEAR) 
     WHEN @p='MONTH' THEN DATE_ADD(NEXT_RUN, INTERVAL @num MONTH) 
     WHEN @p='DAY' THEN DATE_ADD(NEXT_RUN, INTERVAL @num DAY) 
     WHEN @p='WEEK' THEN DATE_ADD(NEXT_RUN, INTERVAL @num WEEK) 
      END 
WHERE TASK_MASTER_ID=100; 

Может кто-то пожалуйста, помогите мне с этим? Спасибо

+0

Каков точный текст ошибки/исключения, что вы получите? – Striezel

+0

/* Ошибка SQL (1064): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '@num: = CAST (FREQUENCY) AS UNSIGNED, @p: = SUBSTR (FREQUENCY, CHAR_LENGTH (@num) +2)' в строке 2 */ /* Затронутые строки: 0 Найдено строк: 0 Предупреждения: 0 Длительность для 0 из 1 запросов: 0,000 сек. * / – Ram

ответ

0

Эта версия не является ошибкой для меня:

UPDATE TASKS_MASTER_COPY 
SET 
LAST_RUN = NEXT_RUN, 
NEXT_RUN = NEXT_RUN + 
    CASE 
    WHEN SUBSTR(FREQUENCY, CHAR_LENGTH(CAST(FREQUENCY AS UNSIGNED)) + 2) = 'YEAR' 
    THEN DATE_ADD(NEXT_RUN, INTERVAL CAST(FREQUENCY AS UNSIGNED) YEAR) 
    WHEN SUBSTR(FREQUENCY, CHAR_LENGTH(CAST(FREQUENCY AS UNSIGNED)) + 2) = 'MONTH' 
    THEN DATE_ADD(NEXT_RUN, INTERVAL CAST(FREQUENCY AS UNSIGNED) MONTH) 
    WHEN SUBSTR(FREQUENCY, CHAR_LENGTH(CAST(FREQUENCY AS UNSIGNED)) + 2) = 'DAY' 
    THEN DATE_ADD(NEXT_RUN, INTERVAL CAST(FREQUENCY AS UNSIGNED) DAY ) 
    WHEN SUBSTR(FREQUENCY, CHAR_LENGTH(CAST(FREQUENCY AS UNSIGNED)) + 2) = 'WEEK' 
    THEN DATE_ADD(NEXT_RUN, INTERVAL CAST(FREQUENCY AS UNSIGNED) WEEK) 
    END 
WHERE TASK_MASTER_ID = 100; 

Несколько вопросов:

  • CAST(FREQUENCY AS UNSIGNED) не CAST(FREQUENCY) AS UNSIGNED
  • UPDATE нуждается в SET после имени таблицы
  • Я считаю, UPDATE может содержать только те столбцы, которые будут обновляться и не может включают @num и @p.

на основе https://stackoverflow.com/a/22404258/761771