create table t1 (col1 int);
将表格留空。
select isnull(col1,0) from t1;
我想在上面的例子中用零替换null。但是,如果表中没有记录,则ISNULL()
不起作用。我怎么能绕过这个?
答案 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