假设我有一个包含三列的表,我想获取至少一个列值不为 null 的所有行,现在我正在使用 coalesce()
下面的方法进行空值检查,它工作正常
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
我想知道是否有更好的方法来进行空值检查
最佳答案
您可以通过三种方式检查该行是否有非 NULL 值:
COALESCE(col1, col2, col3) 不为空
col1 不为空或 col2 不为空或 col3 不为空
ISNULL(col1, ISNULL(col2, ISNULL(col3, 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
比较短得多。您可以在可读性和速度之间做出决定。
关于sql - 优化多列的空检查方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126168/