假设我有一个包含三列的表,并且我想获取至少一列值不为null的所有行,现在我正以下面的方式使用coalesce()
进行null检查,并且运行良好>
with Test_name AS(
select null as id , null as f_name , null as l_name
union ALL
select 1,'fname1', null
union ALL
select null,null,null
) select tn.* from Test_name tn where coalesce(id,f_name,l_name) is not null
预期的输出,这给了我查询
1,'fname1', null
我想知道还有没有更好的方法来进行空检查
答案 0 :(得分:2)
您可以通过三种方式检查行中是否为非NULL值:
COALESCE(col1, col2, col3) IS NOT NULL
col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL
ISNULL(col1, ISNULL(col2, ISNULL(col3, NULL))) IS NOT NULL
您可以使用Microsoft SQL Server Management Studio来比较多个查询。
比较结果:
COALESCE
与IS NOT NULL
:57%至43%COALESCE
与ISNULL
:56%至44%IS NOT NULL
与ISNULL
:49%至51%因此,使用IS NOT NULL
是检查行是否具有不带NULL值的列的最快方法。如果具有可读性,则COALESCE
可能比IS NOT NULL
或ISNULL
的比较短。您可以在可读性和速度之间做出决定。
答案 1 :(得分:1)
您可以像这样添加计算列
ALTER TABLE myTableName
ADD newColumnName AS (CASE
WHEN id IS NULL
AND fname IS NULL
AND lname IS NULL
THEN 0
ELSE 1
END) PERSISTED
然后您可以轻松查询表
SELECT
*
FROM myTable
WHERE newColumnName = 1