我继承了一个表,该表的float
字段值为 NULL,而不是 0 值。我正在做一些基本的查询测试,并且在我的测试中都ISNULL()
提供COALESCE()
了相同的准确输出。在我的测试中(一张大约有 5K 条记录的表),时间差也可以忽略不计。
问题是下面的示例 DDL,是否有使用的好处,ISNULL()
反之亦然COALESCE()
?是否存在我尚未看到的可能提供不准确计算的情况?
Create Table #Test
(
blue float
,red float
,green float
)
Insert Into #Test VALUES
('14', NULL, '12')
,(NULL, '12', '10')
,(NULL, NULL, '8')
,('10', '2', NULL)
Select
ISNULL(blue,0)+ISNULL(red,0)+ISNULL(green,0)
FROM #Test
SELECT
COALESCE(blue,0)+COALESCE(red,0)+COALESCE(green,0)
FROM #Test
COALESCE 可以采用一整套值来检查 NULL,其中 ISNULL 采用一个检查值,并且需要嵌套来检查更多值。
对比
由于您的案例使用的是浮点值,因此计算结果应该没有差异。如果代码可读性和所需的嵌套量最小化,我能真正看到的唯一好处。