【问题标题】:What is wrong with the syntax of this MySQL query on dates?这个 MySQL 查询的日期语法有什么问题?
【发布时间】:2014-11-03 08:36:35
【问题描述】:

phpMyAdmin 告诉我以下代码 sn-p 语法不正确:

 SET @time := NOW();
 SET @timeset :=0;


 IF @timeset=1 
    THEN SET @time := DATE_ADD(@time,INTERVAL 10 SECOND);
    ELSE SET @time := DATE_SUB(NOW(),INTERVAL 1 DAY);
         SET @timeset := 1; 
    END IF; 

但我看不出有什么问题。

确切的错误消息是:

更新:感谢 wolfgangalther 的回答,我找到了以下解决方法:

SET @time := NOW();
SET @timeset :=0;
SET @time=IF(@timeset=1,DATE_ADD(@time,INTERVAL 10 SECOND),DATE_SUB(NOW(),INTERVAL 1 DAY)); 
SET @timeset:=1; 

【问题讨论】:

  • 是否声明了timesettime
  • @hjpotter92 我已经想到了。所以是的,它们被声明了;我只是放大了我的代码 sn-p 来显示
  • 根据您最近的问题,我们更喜欢以文本形式提供代码和错误消息。这里的代码很好,但错误是屏幕截图。只需将其从浏览器复制到剪贴板,然后将其发布到您的问题中。

标签: mysql


【解决方案1】:

来自MySQL manual

MySQL 支持 IF、CASE、ITERATE、LEAVE LOOP、WHILE 和 REPEAT 结构,用于在存储程序中进行流控制。

您不能自行发出IF 构造!

这里也有一个简短的讨论(包括一些替代方案): https://dba.stackexchange.com/questions/80132/using-if-statement-outside-of-a-stored-procedure-or-function

注意:在该位置使用 IF 语句 has been requested as a feature in the past,但目前尚未在 MySQL 中实现。

编辑:
存储程序要么是存储过程,要么是存储函数。存储函数与存储过程相同,它们只是返回一个值。

阅读有关存储过程的更多信息:

【讨论】:

  • 我为我的新手无知道歉,我不知道在这种情况下什么是“存储程序/函数”?
【解决方案2】:

这种IF ELSE只能在存储过程中使用,但可以在查询中使用If条件,如下所示。

IF(expr,if_true_expr,if_false_expr)


示例

SELECT customerNumber,
       customerName,
       IF(state IS NULL,'N/A',state) state,
       country
FROM customers;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多