2

私の理解によると、IsNull関数は最初の値がnullか空白かをチェックし、次の値を返します。

SELECT ISNULL(1,getdate()) 

しかし、上記のステートメントはエラーを出します。誰かが理由を強調するのを助けることができますか?

4

3 に答える 3

7

データ型datetimeからintへの暗黙的な変換は許可されていません。最初の値をcharにします。

SELECT ISNULL('1',getdate())

ところで、ISNULLはANSIではなく、所有権があり、2つのパラメーターのみを受け入れることに注意してください。COALESCEは、さらに多くのパラメーターを受け入れます。

DECLARE @1 INT,@2 int, @3 INT, @4 int
SELECT @4 = 6

SELECT COALESCE(@1,@2,@3,@4)

以下のこのステートメントは正しくありません

IsNull関数は、最初の値がnullまたは空白であるかどうかをチェックし、次の値を返します。

空白は気にしません

これを実行します

SELECT ISNULL('','A')    -- Blank is returned not A
SELECT ISNULL(NULL,'A')  -- A is returned because the first value is NULL

ISNULLとCOALESCEのもう1つの違いは、ISNULLが最初のパラメーターと同じ長さを返すことです。

これを実行します

DECLARE @c CHAR(3)

SELECT ISNULL(@c,'not available')  -- not
SELECT COALESCE(@c,'not available') --not available
于 2011-09-17T15:03:16.270 に答える
0

整数を日付に置き換えようとしていると思います。代わりに、このSELECT ISNULL(1,2)を試してください。

于 2011-09-17T15:04:13.290 に答える
0

これを行うことで自動キャストすることができますが、私は実際にはお勧めしません。これを見ている他の誰かがそれが何をしようとしているのかは非常に不明確です:

SELECT case when not 1 is null then 1 else getdate() end
于 2011-09-17T15:15:45.573 に答える