根据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
不会像文档中指定的那样whatever
或0
。那么为什么我得到 expression3 作为结果?
答案 0 :(得分:2)
expr1
是一个布尔表达式,或者至少是一个数值,而不是一个字符串。
您可以使用true
和false
,或1
和0
等。从技术上讲,任何非零数值都会被解释为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';