我正在尝试测试变量是否为null但我似乎有语法错误,我的代码是:
DECLARE @count1 INT
SET @count1 =
(SELECT HPlayedHome FROM League WHERE GameID =
(SELECT TOP 1 GameID From Goals WHERE Date <= '20130923' AND Home = 'Palermo'
AND (GameID >=2551 AND GameId <= 5100) ORDER BY Date Desc))
SELECT CASE @count1 IS NULL THEN 0 ELSE @count1 END
我希望查询返回@ count1的值,但如果它为NULL则返回0。 SQL SERVER 2012突出显示IS上的语法错误,“IS附近的语法不正确”。
答案 0 :(得分:10)
CASE WHEN
语法正确:
SELECT CASE WHEN @count1 IS NULL THEN 0 ELSE @count1 END
您知道可以将此缩短为
SELECT ISNULL(@count1, 0)
答案 1 :(得分:1)
CASE有两种形式:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result3
END
CASE variable
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE result3
END
您可以使用表单2,但将IS更改为WHEN以使其在语法上正确:
SELECT CASE @count1 WHEN NULL THEN 0 ELSE @count1 END
不幸的是,比较是使用相等测试进行的,而NULL不等于NULL,所以你必须使用表单1:
SELECT CASE WHEN @count1 IS NULL THEN 0 ELSE @count1 END
已经有一个处理空值的函数:COALESCE()
,它返回传递给它的第一个非空值:
SELECT COALESCE(@count1, 0)