假设我有一个包含三列的表,并且我想采用其中至少一个列值不为null的所有行,现在我正在使用coalesce()以下方式进行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检查
您可以通过三种方式检查行中是否为非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
ISNULL
因此,使用IS NOT NULL最快的方法来检查行是否具有不带NULL值的列。在可读性的情况下,COALESCE可以比aIS NOT NULL或ISNULL比较短得多。您可以在可读性和速度之间做出选择。