在IF语句

时间:2017-02-27 15:56:04

标签: mysql database

我有一个IF-Statement的以下查询。如果一个字段为空,则应输出一个字符串,其中包含来自另一个字段的值。

SELECT  IF(field1  IS NULL or field1    = '', 'Field is empty but field 2 says field2', field1   )AS field1 FROM...

当我输入如上所述的查询时,它只会输出字符串

  

字段为空,但字段2表示field2

输出应为

  

字段为空,但字段2表示5 (5是字段的值)

我也尝试将字段放入引号,但是抛出了一个mysql错误。

我想也许引号的方式是正确的,但我错过了一个字符串连接器或类似的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

学习使用CASEIF()是特定于MySQL的。 CASE是标准的,可在大多数数据库中使用。但您问题的答案是CONCAT()REPLACE()

SELECT (CASE WHEN field1 IS NULL OR field1  = ''
             THEN CONCAT('Field is empty but field 2 says ', field2)
             ELSE field1
        END) AS field1
FROM ... ;

我也喜欢使用REPLACE()来编写这样的格式:

SELECT (CASE WHEN field1 IS NULL OR field1  = ''
             THEN REPLACE('Field is empty but field 2 says {0}', '{0}', field2)
             ELSE field1
        END) AS field1
FROM ... ;

这样可以更容易地看到最终字符串的样子。

答案 1 :(得分:0)

SQL不够聪明,不知道如何动态地将变量值注入字符串。它只输出您指定的文字值。你需要连接它:

SELECT  IF(field1  IS NULL or field1    = '', CONCAT('Field is empty but field 2 says ', field2), field1   )AS field1 FROM