2016-10-12 15 views
1

私はなぜ算術+はテキストよりも優先されますか?

select '1' + '1' 

を実行すると、結果は私が別のものにテキストを追加しておりますので、11です。私は結果が2である

select 1 + '1' 

を実行する場合

Iは、算術演算子が原因で最初のオペランドのタイプの連結器の上に選択されていると仮定する。私の推論が有効であった場合は、

select '1' + 1 

の結果は11になりますしかし、その代わりに、それはそう2.ですが、オペレータ+は算術演算子として使用することを試みているようだとのどちらかのオペランドは算術演算で、次の演算子に進みます。それが本当であるならば、私はデータ型 int型にvarchar型の値が「customer_」を変換するときに失敗した

変換のエラーを取得しなかった理由、それが説明するだろう。

select and had 'customer_' + <somenumber>を実行したときのcustomer_<somenumber>ではなく、customer_<somenumber>です。

私は、算術+がSQL Serverでの連結の意味よりも好ましいことを確認したと思います。私は正しい?もしそうなら、この行動の正式な理由はありますか?

+4

に変換しようとしませんので、理由[データ型の優先順位]である(https://msdn.microsoft.com /en-us/library/ms190309.aspx?f=255&MSPPError=-2147217396) – Lamak

答えて

3

実行しているのはdata type precedenceです。 SQL Serverは、の数値の後に文字データ型を探します。したがって、オペランドの順序に関係なく(1 + '1''1' + 1)、型を数値に変換して成功させようとしています。

2番目の試みでも同じことが起こります。整数と一緒に算術演算子を使用しているため、文字列customer_を整数に変換しようとしています。

+0

ありがとう、あなたの答えは私の前提を確認しました。 –

関連する問題