2011-09-17 2 views
2

私の理解によると、IsNull関数は、nullまたは空白の場合は最初の値をチェックし、次の値を返します。SQLサーバーのISNULL動作

SELECT ISNULL(1,getdate()) 

しかし、上記の文章は誤りです。誰かがその理由を強調するのに役立つことができますか? intにデータ型日時から

+4

何が間違っていますか? – Mat

+0

これからどのような結果が得られますか? –

答えて

7

暗黙の変換が許可されていない、チャーBTW

SELECT ISNULL('1',getdate()) 

最初の値を作る、ちょうどISNULLは、ANSIはproprieteryであり、唯一の2つのパラメータを受け入れていないことに注意して、COALESCEはA受け付け多くの

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の間に別の違いは、ISNULLは、最初のパラメータとして

実行これを同じ長さを返すことで、ブランクのために気にしません。

DECLARE @c CHAR(3) 

SELECT ISNULL(@c,'not available') -- not 
SELECT COALESCE(@c,'not available') --not available 
+0

情報ありがとうございますが、ISNULLは、最初の値がNULLでない場合でも、2番目のパラメータのデータ型をチェックします。 –

+2

BTW: 'coalesce(1、getdate())'は、優先順位に従って第1パラメータに従わない。 –

+1

coalesceとisnullの違いに関するいくつかの詳細:http://sqlwithmanoj.wordpress.com/2010/12/23/isnull-vs-coalesce/ – alun

0

私はIntegerをDateに置き換えようとしていると思います。代わりに、このSELECT ISNULL(1,2)を試してみてください。

0

これを自動キャストすることができますが、私は本当にそれをお勧めしません。それは何をしようとしているかを見ている他の人には不明です。

SELECT case when not 1 is null then 1 else getdate() end