如果MySQL中的语句选择

时间:2016-03-31 16:08:21

标签: mysql if-statement select

根据docs a if如下工作:

  

如果(表达式1 表达式2 表达式3

     

如果 expr1 TRUE expr1 <> 0 expr1 <> { {1}})然后NULL返回 expr2 ;否则它返回 expr3 [...]。

这是一个代表我的问题的随机小提琴:http://sqlfiddle.com/#!9/8076e2/1

基本上我要做的是以下内容:

IF()

由于那里的记录符合我的SELECT IF(whatever, 1, 2) FROM testing WHERE whatever = 'abc'; 条款,因此它基本上意味着WHERE不会像文档中指定的那样whatever0。那么为什么我得到 expression3 作为结果?

2 个答案:

答案 0 :(得分:2)

expr1是一个布尔表达式,或者至少是一个数值,而不是一个字符串。

您可以使用truefalse,或10等。从技术上讲,任何非零数值都会被解释为true。< / p>

由于您使用字符串'abc'作为expr1,因此MySQL会将其隐式转换为代表0的数字false

为了返回非空字符串的一个结果,以及空字符串或null的另一个结果,您可以使用如下查询:

SELECT if((whatever is not null and whatever != ''), 1, 2) 
FROM testing 
WHERE whatever = 'abc';

如果您想遵循SQL标准,也可以使用CASE执行相同的操作:

SELECT (case when (whatever is not null and whatever != '') then 1 else 2 end) 
FROM testing 
WHERE whatever = 'abc';

答案 1 :(得分:1)

SELECT IF(COUNT(whatever) > 0, 1, 2) FROM testing WHERE whatever = 'abc';