1

在下面的 SQL 选择语句中,如果 name 为 null,我希望打印国籍,并且我有一个 SQL 子句的 if 语法工作,但在下面没有看到国籍打印:

table test2

id           integer
case         integer
nationality  char(10)
name         char(24)

1 1 france  ""
2 2 england john

select t.id, 
       if(t.name is null, t.nationality, t.name) 
       as name_equivalent 
from   test2 t;

产生 id name_equivalent


1 ""
2 john

这是为什么?谢谢你。

4

3 回答 3

2

您正在检查名称是否为空,但它被设置为空字符串。要检查两者,您需要:

if(t.name is null or t.name='', t.nationality, t.name)
于 2012-07-16T16:29:23.980 回答
2

null不等于空字符串。空字符串''是有效的数据形式,null表示不存在数据。

尝试任一

if (t.name is null or t.name='', t.nationality, t.name)

或者将第一列中的名称设置为null

1 1 france null
于 2012-07-16T16:31:22.130 回答
1

看起来 France 的 name 字段实际上是一个空字符串,而不是 null。您还需要在您的选择语句中说明它是空的。如t.name = ''

于 2012-07-16T16:29:32.480 回答