处理SQL Server 2012 SELECT语句中缺少的数据

时间:2015-08-03 13:09:17

标签: sql sql-server tsql null

 create table t1 (col1 int);

将表格留空。

select isnull(col1,0) from t1;

我想在上面的例子中用零替换null。但是,如果表中没有记录,则ISNULL()不起作用。我怎么能绕过这个?

7 个答案:

答案 0 :(得分:1)

如果你想要替换非现有值,那么请对所提到的select语句进行另一个空检查。像这样

ISNULL(select isnull(col1,0) from t1,0)

答案 1 :(得分:1)

COALESCE(col1, 0)

将为您提供列表中的第一个非NULL值,即

    如果col1不包含col1 ,则
  • NULL 如果0包含col1,则
  • NULL

答案 2 :(得分:1)

也许你可以先测试表是否为空:

IF NOT EXISTS (select * from t1) 
    SELECT 0
ELSE select coalesce(col1,0) from t1;

无论如何,你应该使用COALESCE而不是ISNULL,因为它是标准的SQL。

答案 3 :(得分:0)

如果表中没有记录,则查询返回EMPTY而不是NULL。 您可以将EMPTY值转​​换为NULL值,然后将其切换为0,如下所示:

SELECT ISNULL((SELECT col1 FROM tl),0) AS col1;

答案 4 :(得分:0)

如果绝对必须为空表返回一个值,可能是:

if ((select COUNT(*) from t1) = 0)
begin
    select 0 as col1;
end
else
begin
    select isnull(col1,0) as col1 from t1;
end

答案 5 :(得分:0)

当我想从一个可能为空或具有任意行数的表中返回完全一行时,我经常使用聚合:

select coalesce(max(col1), 0)
from t1;

保证只返回一行。但是,当表不为空时,不清楚你想要什么。

答案 6 :(得分:0)

即使left join中没有行,OneZero也会获得一个硬编码表t1

select isnull(t1.col1, OneZero.zero) 
from ( values(0) ) as OneZero (zero)
left join t1 
  on 1 = 1