6

我发现非常奇怪的 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 之间有什么区别 - 从逻辑的角度来看,两者都应该返回完全相同的结果。

任何人都知道为什么这两个命令之间有区别吗?

4

1 回答 1

11

"IF 是单个分叉,"CASE" 可以是多个如果你有两个以上的值可选值,则使用 "Case",当你只有两个值时使用 "IF"。

CASE的一般结构是:

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

IF的一般结构:

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

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

于 2012-12-04T09:50:55.363 回答