/ / SQL Server - sql、sql-server-2008、sql-server-2005、sql-server-2008-r2、sql-server-2000のテキストと数値を持つvarcharフィールドの2つの数値範囲の中から選択します

SQL Server - sql、sql-server-2008、sql-server-2005、sql-server-2008-r2、sql-server-2000のテキストと数値を持つvarcharフィールドの2つの数値範囲の中から選択します。

私は0から2000000までの数字の範囲のテーブルを持っています。私は50と100の間で何かをすると、物事の記録を得るために文を使うことができます。それはうまくいきます。

しかし、私が走っている問題はこれ以来です"1FD32"という文字列の中に何かレコードがある場合は、varcharです。それを選択することはできません.SQLサーバはintを探しているので "50と100の間で"変換できません。どのようにしてこれらの範囲内のすべてのレコードを取得し、その中の文字を無視することができますか?

回答:

回答№1は5

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

したがって、ここで動作するコードは次のとおりです。

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

数字に小数点が含まれている場合は、 DECIMAL または FLOAT 代わりに。