2017-02-27 57 views
0

我使用IF语句进行了以下查询。如果一个字段为空,它应该从另一个字段输出一个带有值的字符串。在IF语句中将其他字段添加到字符串中

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

学会使用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 ... ; 

这使得它更容易看到最终的字符串将是什么样子。

+0

我选择了Replace方法。非常感谢! – user3725253

0

SQL不够聪明,无法知道如何动态地向字符串中插入一个变量值。它只是输出你指定的文字值。您需要连接它:

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