2

変数が 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 付近の構文が正しくありません」を強調しています。

4

2 に答える 2

11

CASE WHENは正しい構文です:

SELECT CASE WHEN @count1 IS NULL THEN 0 ELSE @count1 END

これを次のように短縮できることを認識しています。

SELECT ISNULL(@count1, 0)
于 2013-09-23T14:49:34.860 に答える
1

CASE には次の 2 つの形式があります。

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

nullを処理する関数が既にありCOALESCE()ます。これは、渡された最初の非 null 値を返します。

SELECT COALESCE(@count1, 0)
于 2013-09-23T14:57:36.097 に答える