3

0 ~ 2000000 の範囲の数値を持つテーブルがあります。BETWEEN 50 AND 100 を実行すると、between ステートメントを使用して物事の記録を取得できます。これは機能します。

しかし、私が直面している問題は、文字列に「1FD32」のようなレコードがある場合、この列は varchar であるため、選択できないことです。SQL サーバーは int を探しているため、「BETWEEN 50 AND 100」を変換できません。これらの範囲内のすべてのレコードを取得し、文字を含むレコードを無視するにはどうすればよいですか?

4

1 に答える 1

7

数値比較を行う場合、エラーがないことを保証する唯一の方法は、CASEステートメントを使用することです。これは、評価の順序を保証する唯一の SQL ステートメントです (集計関数を使用しない場合)。

したがって、これが機能するコードです。

select *
from t
where (case when isnumeric(col) = 1 then cast(col as bigint) end) between 20 and 100

数値に小数点が含まれている場合は、代わりにDECIMALorを使用することに注意してください。FLOAT

于 2012-10-23T20:56:01.993 に答える