Sqlite
中借鉴了
oracle
、
db2
以及
postgresql
中得
null
操作方法,也就是借由
coalesce
的方法来处理
null
类型的数据。当遇到返回
null
数据时,
coalesce
将第二个参数代替
null
。举例如下:
有表
phones
:
create table phones(name text, number integer);
insert into phones values(‘josh’, 86123413);
insert into phones values(‘mariah’, 89804517);
insert into phones values(‘samantha’, NULL);
很不幸,
samantha
的办公室还没有装电话,所以在表里虽然有她的名字但只能用
NULL
来做填充。如果有人希望在该数据库中查询她的电话时,将得到一个
NULL
的数据。当然首先是要设置
null
的表示字符串,通常情况下我们使用
’NULL’
来表示。为了更清楚地表达这种不存在的状况就需要使用
coalesce
。
Select coalesce(number, ‘no phone number for ’||name) as number from phones where name = ‘samantha’;
这样的查询可以得到合适的结果。至此似乎一切顺利,可事实上却忽视了一种最基本的情况。
Select coalesce(number, ‘no phone number for ’||name) as number from phones where name = ‘tata’;
公司里大概是没有一个叫
tata
的人,也许我们甚至难以确定他的性别。可是即便使用了
coalesce
也将一无所获。
Sqlite
里就是这样的,相关的文档里没有作出很好的解释。但它的确是返回了一个
NULL
值的,这个可以使用
nullif
来得到证实。
Select nullif((Select number from phones where name = ‘tata’), NULL) as result;
还好可以确定它返回了一个
NULL
,只要将
nullif
嵌到
coalesce
中便可以得到希望的结果了。
Select coalesce(nullif((Select number from phones where name = ‘tata’), NULL) , ‘no such person’) as result;