2017-06-27 5 views
1

サンプルコード:TSQLは+演算子の適用方法をどのように決定しますか?

declare @str nvarchar(100) 
set @str = 5 
set @str = @str + 2 
select @str 

コードの上には '7' に@strを設定します。しかし、プラス記号は文字列を連結するために使用することもできます(例えば、そのような場合にはstrは最後に '52'になります)。

私の質問は、+が上記のような場合に文字列連結または算術演算であるべきかどうかをSQL Serverがどのように決定するのですか?

+1

未処理の数値を 'varchar'型に格納しないでください。 –

+0

はい、私は認識しています。ちょうど興味があった。 –

+5

'+'の2つの値の型が異なる場合、より優先度の高い「勝」型 - ここでは 'int'は' varchar'より優先度が高いため、SQL Serverは両方の値を 'int'に変換します算術和を計算する。両方の値が 'varchar'の場合、文字列の連結が行われます。型の優先順位については、[公式MSDNドキュメント](https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql)を参照してください。 –

答えて

3

+の2つの値が異なるタイプの場合は、より優先度の高いタイプが「優先」になります。あなたのケースではここ

intvarcharよりも優先順位が高いことから、SQL Serverは intに両方の値を変換してから、「文字列」以来、あなたのケースで動作する算術和を(実行しようとするも有効です。 int値)。

両方の値がvarcharの場合、文字列連結が実行されます。タイプの優先順位の詳細については、official MSDN Documentationを参照してください。

関連する問題