【问题标题】:MYSQL DATE_ADD interval as a variable OR from another columnMYSQL DATE_ADD 间隔作为变量或来自另一列
【发布时间】:2016-09-19 15:37:31
【问题描述】:

我正在尝试在我的表上创建一个事件,每隔几分钟运行一次,以查看“next_run”是否为 now(),如果是,请将“频率”添加到“next_run”,但每次我都收到语法异常.

下面是表结构...

     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;

有人可以帮我解决这个问题吗? 提前致谢。

【问题讨论】:

  • 您收到的确切错误文本/异常是什么?
  • /* SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '@num:=CAST(FREQUENCY) AS UNSIGNED, @p :=SUBSTR(FREQUENCY, CHAR_LENGTH(@num)+2)' 附近使用正确的语法 / / 受影响的行:0 找到的行:0 警告:0 1 个查询中 0 个的持续时间:0.000 秒。 */

标签: mysql dateadd


【解决方案1】:

这个版本对我来说没有错误:

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

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多