【问题标题】:If Statement in MySQL SelectMySQL Select 中的 If 语句
【发布时间】: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 作为结果?

【问题讨论】:

标签: mysql if-statement select


【解决方案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';

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2012-02-25
    • 2016-12-29
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多