4

私はColdFusion8とSQLServer2008R2を使用しています。

値の列をクエリして、範囲内の値を持つ行を取得しようとしています。列は数値である必要がありますが、そうではありません。これは、varcharとして(他の誰かによって)設定されています。100,000行以上のデータがあります。データの偽のサンプルは次のとおりです。

ID COLUMN
1  1
2  1.2 
3  0.9 
4  5 
5  -6

私のクエリは次のようになります。

select column
from table
where column between 1 and 2

whereステートメントの列がvarcharであるため、このクエリは実行されず、変換エラーが発生するため、whereステートメントを次のように変更する必要があります。

where column between '1' and '2'

さて、このようなクエリを実行すると、実行されますが、結果が得られません。ただし、列フィールドの値の多くがクエリ対象の範囲内にあることがわかっているため、結果が表示されるはずです。

フィールドが数値ではなくvarcharであるために、結果が表示されないのではないかと思います。それは私の結果を台無しにしているのでしょうか?

また、検索しているレコードが100,000以上ありますが、数値フィールドの代わりにvarcharフィールドを使用すると、パフォーマンスに大きな影響がありますか?

4

2 に答える 2

8

WHERE ISNUMERIC(column) = 1 AND CAST(column AS decimal(10,5)) BETWEEN 1 AND 2たとえば、結果をキャストする必要があります。

于 2012-11-08T21:00:44.057 に答える
1

もう1つのオプション

暗黙の変換はnvarchar()からnumeric()に実行されます

操作のコストは明白で暗黙の変換は同じですが、少しコードを書くと少なくなります;))

  • 述語

ここに画像の説明を入力してください

SELECT *
FROM dbo.your_table
WHERE [COLUMN] BETWEEN 1.00 AND 2.00
于 2012-11-09T09:11:20.830 に答える