2

なぜ、これを実行すると、答えとして2.00が得られるのですか?

declare @temp int  = 2
select CASE WHEN @temp = 1 THEN cast(@temp as decimal(5, 2))
         WHEN @temp = 2 THEN  @temp
         ELSE NULL
    END

しかし、これを実行すると、@ temp2だけを選択すると、答えとして2が得られます。

declare @temp2 int = 2
select CAST(@temp2 as decimal(5,2))
select @temp2

ブリッジは正しいです:

result_expressionsの型のセットとオプションのelse_result_expressionから最も優先度の高い型を返します。(出典

データ型の優先順位

4

2 に答える 2

3

http://msdn.microsoft.com/en-us/library/ms181765.aspx セクションの戻り値の型を参照してください。最も優先順位の高いタイプが使用されます。

于 2012-06-08T15:55:06.460 に答える
2

caseステートメントからの可能な出力ごとに、戻り値は同じデータ型でなければならないと思います。可能な出力を考慮し、それらをすべて同じ型にキャストしようとします。

最初の可能な戻り値は typedecimal(5, 2)で、2 番目は typeintです。両方の値を保持できる最高位のデータ型を選択し、すべての出力をこれに自動的にキャストします。

2 番目のスクリプトは期待どおりに動作しています。実際には、次の 2 つの値が出力されます。

  • 2.00- これは 2 行目のキャストの結果です
  • 2- これは @temp2 の値です - これは int で、最初の行で割り当てました
于 2012-06-08T15:52:08.947 に答える