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)

如果 expr1TRUE (expr1 0expr1 NULL) 则 IF() 返回expr2;否则返回 expr3 [...]。

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

基本上我想做的是以下几点:

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

由于那里有与我的WHERE 子句匹配的记录,这基本上意味着whatever 不会像文档中指定的那样是0NULL。那为什么我会得到 expression3 作为结果?

【问题讨论】:

In mysql why is this IF returning false?的可能重复 【参考方案1】:

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

您可以使用truefalse,或10 等。从技术上讲,任何非零数值都被解释为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 语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql select语句中的if条件

IF 语句中的 MySQL SELECT WHERE

mysql语句where条件中的是啥意思

postgreSQL 在 select 语句中的 if 语句中声明 var

如何在 mySQL 的 SELECT 语句中使用 If 语句和关系运算符? [复制]

MySQL数据查询