MySQL Select 中的 If 语句
Posted
技术标签:
【中文标题】MySQL Select 中的 If 语句【英文标题】:If Statement in MySQL Select 【发布时间】:2016-07-20 04:57:26 【问题描述】:根据docs a if 工作如下:
IF(expr1,expr2,expr3)
如果 expr1 是
TRUE
(expr10
和 expr1NULL
) 则IF()
返回expr2;否则返回 expr3 [...]。
这是代表我的问题的随机小提琴:http://sqlfiddle.com/#!9/8076e2/1
基本上我想做的是以下几点:
SELECT IF(whatever, 1, 2) FROM testing WHERE whatever = 'abc';
由于那里有与我的WHERE
子句匹配的记录,这基本上意味着whatever
不会像文档中指定的那样是0
或NULL
。那为什么我会得到 expression3 作为结果?
【问题讨论】:
In mysql why is this IF returning false?的可能重复 【参考方案1】:expr1
是一个布尔表达式,或者至少是一个数值,而不是一个字符串。
您可以使用true
和false
,或1
和0
等。从技术上讲,任何非零数值都被解释为true
。
由于您将字符串 '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';
【讨论】:
为了引导我找到实现我想要的正确方法,稍微扩展你的答案是否超出了范围?换句话说,我如何将非空字符串评估为 true? 没问题。我现在将在我的答案中添加两个示例查询。【参考方案2】:SELECT IF(COUNT(whatever) > 0, 1, 2) FROM testing WHERE whatever = 'abc';
【讨论】:
以上是关于MySQL Select 中的 If 语句的主要内容,如果未能解决你的问题,请参考以下文章
postgreSQL 在 select 语句中的 if 语句中声明 var