我有一个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错误。
我想也许引号的方式是正确的,但我错过了一个字符串连接器或类似的东西。
有什么想法吗?
答案 0 :(得分:2)
学习使用CASE
。 IF()
是特定于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