mysql中CASE和IF之间有什么区别

die*_*cht 6 mysql

我发现MySQL的行为很奇怪:

我有一个带有变音字母的字符串,我在其上运行一些IF表达式.就像是:

IF(length(field) < 10, '', replace(field, "\n", "<BR>"))
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是,如果我通过CASE替换它,那么结果会在第一个unlaut字母上被删除!

CASE WHEN length(field)<10 THEN '' ELSE replace(field, "\n", "<BR>") END
Run Code Online (Sandbox Code Playgroud)

此外,我注意到只有在查询中还有GROUP BY部分时才会发生.

我无法理解CASE和IF之间的区别 - 从逻辑的角度来看,两者应该完全相同.

任何人都知道为什么这两个命令之间存在差异?

Cod*_*sen 8

"IF是单个分支,"CASE"可以是多个Use"Case",如果你有两个以上的值可选值,"IF"只有两个值.

CASE的一般结构是:

CASE x
WHEN a THEN ..
WHEN b THEN ..
...
ELSE
END
Run Code Online (Sandbox Code Playgroud)

IF的一般结构:

IF (expr)
THEN...
ELSE...
END
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,但我想问的是,为什么 IF 的结果和一条语句 CASE 的结果会存在差异? (2认同)
  • 区别是非常基本的。如果您尝试将某些内容评估为 TRUE/FALSE 条件,则 IF 语句非常有用。当有多个可能的条件时,使用 CASE 语句。您可以使用嵌套 IF 语句完成同样的事情,但这会变得混乱。 (2认同)