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

时间:2012-12-04 09:42:43

标签: mysql

我发现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之间的区别 - 从逻辑的角度来看,两者都应该完全相同。

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

2 个答案:

答案 0 :(得分:8)

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

CASE的一般结构是:

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

IF的一般结构:

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

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

答案 1 :(得分:-2)

好像有些mysql内部实现“功能”。