【问题标题】:What's the difference between CASE and IF in mysqlmysql中的CASE和IF有什么区别
【发布时间】:2012-11-21 21:38:59
【问题描述】:

我发现 MySQL 的行为很奇怪:

我有一个带有元音变音字母的字符串,我在上面运行了一些 IF 表达式。 比如:

IF(length(field) < 10, '', replace(field, "\n", "<BR>"))

它工作正常。

但是,如果我用 CASE 替换它,那么结果会在第一个 unlaut 字母上被截断!

CASE WHEN length(field)<10 THEN '' ELSE replace(field, "\n", "<BR>") END

另外,我注意到只有在查询中还有 GROUP BY 部分时才会发生这种情况。

我不明白 CASE 和 IF 之间有什么区别 - 从逻辑角度来看,两者都应该返回完全相同的结果。

有人知道为什么这两个命令有区别吗?

【问题讨论】:

  • “结果在第一个 unlaut 字母上被剪切”是什么意思?什么是“不劳而获的信”?您使用的是什么版本的 MySQL?如果您要检查字段是否有 10 个 字符(而不是 10 个字节),您应该使用 CHAR_LENGTH 而不是 LENGTH。

标签: mysql


【解决方案1】:

"IF是单个fork,"CASE"可以是多个 如果您有两个以上的可选值,请使用“Case”,如果您只有两个值,请使用“IF”。

CASE的一般结构是:

CASE x
WHEN a THEN ..
WHEN b THEN ..
...
ELSE
END

IF的一般结构:

IF (expr)
THEN...
ELSE...
END

所以,基本上 IF 是一个只有一个 'WHEN' 语句的 CASE。

【讨论】:

  • 对,但我要问的是为什么 IF 的结果和一个语句 CASE 的结果之间可能存在差异?
  • 区别非常基本。如果您尝试将某事评估为 TRUE/FALSE 条件,则 IF 语句很有用。当您有多个可能的条件时,使用 CASE 语句。您可以使用嵌套的 IF 语句完成同样的事情,但这会变得混乱。
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2013-11-18
  • 2011-03-11
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多