1

amountタイプの列を持つテーブルがありますDEC
次のクエリが機能します。
SELECT * FROM mytable WHERE amount < '1';

SELECT * FROM mytable WHERE amount = '1.5';

つまり、 is のような引用符を文字値に使用してもamount(実際は数値であるにもかかわらず)、クエリは引き続き機能します。

私の質問は次のとおり
です。これは、SQL Server がデータ型が実際には数値であることを「理解し」、SQL を実行するときに引用符を無視するためですか、select
または
SQL Server が最初に値をテキストに変換amountしてから比較を行うためですか?したがって、これにはパフォーマンスがあります変換によるオーバーヘッド?

4

1 に答える 1

-1

はい、列「金額」が数値として定義されているため、数値変換が行われています。これをテストするには、次を試すことができます。

SELECT * FROM mytable WHERE amount < '1a'; 

次のエラー メッセージが表示されます。

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

つまり、varchar は数値に変換されており、その逆ではありません。

于 2013-03-30T09:54:00.873 に答える