【问题标题】:Invalid syntax CASE statement无效的语法 CASE 语句
【发布时间】:2017-11-17 01:39:34
【问题描述】:

我整天都在为 SQL 中一个非常简单的 case 语句而苦苦挣扎……

我有这段代码:

UPDATE `alugueis`
    SET    `status` = CASE
             WHEN `pago_em` is null THEN 'Atrasado'
             WHEN `pago_em` is '' THEN 'Atrasado'
             ELSE `status`
           END
WHERE  `vencimento` <= CURDATE()

我得到的错误是:[1064][42000]: (conn:235) 你的 SQL 语法有错误;检查手册.......

我不认为我混淆了 CASE 的两种形式,或者我是吗?

非常感谢!

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全其他的东西。

标签: mysql sql syntax case


【解决方案1】:

我想你打算:

UPDATE alugueis
    SET status = (CASE WHEN pago_em is null THEN 'Atrasado'
                       WHEN pago_em = '' THEN 'Atrasado'
                       ELSE status
                  END)
    WHERE vencimento <= CURDATE();

问题是is ''

这通常不用CASE

UPDATE alugueis
    SET status = 'Atrasado'
    WHERE vencimento <= CURDATE() AND
          (pago_em IS NULL OR pago_em = '')

【讨论】:

  • 尝试了你的第二个实现,它几乎可以工作。它不会起作用,只是因为 pago_em 是一个日期,它返回给我“不正确的日期时间值:''”。如果我想检查日期是否不为空,只检查“IS NULL”就足够了吗?到目前为止非常感谢!
  • 如果类型是日期,那么与NULL比较就足够了。
  • 仍然有问题:/有些日期的值是“0000-00-00”,它们不被认为是 NULL,所以它给了我错误的结果。我该如何选择它们?在这里尝试做很多事情......
  • @AndréPadilha 。 . .您只需添加条件or pago_em = '0000-00-00'
  • 非常感谢!抱歉回复晚了.....但它现在可以 100% 工作!
【解决方案2】:

你不能使用IS ''

UPDATE `alugueis`
    SET    `status` = CASE
             WHEN `pago_em` is null THEN 'Atrasado'
             WHEN `pago_em` = '' THEN 'Atrasado'
             ELSE `status`
           END
WHERE  `vencimento` <= CURDATE()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多