2017-08-01 7 views
0

私はシナリオを持っています。どのように解決できるか分かりません。varcharをintに変更してください

まあ、私は、カテゴリー内 myTable

ID(int) | Category (varchar(20)) 
1 | 1029 
2 | 2020 
3 | 2030 

すべてのレコードが数値である。この例のようなデータベースを持っていますが、フォーマットがvarchar型です。 タイプをvarcharからintに変更できません。

私の必要なものは、SQLのクエリに可能性のintにvarcharを変換します。 ので、私はどのように可能であることを何かが好きやって

SELECT * FROM myTable HERE Category => 1000 AND Category =< 2000 

をTIS必要ですか?

申し訳ありませんが、私の書かれた英語が、私はとにかく理解してほしい:)

答えて

7

だけCONVERTを使用します。

SELECT * 
FROM myTable 
WHERE Convert(Int, Category) >= 1000 
AND  Convert(Int, Category) <= 2000 

あなたはまた、BETWEENでクエリを簡素化できます。

SELECT * 
FROM myTable 
WHERE Convert(Int, Category) BETWEEN 1000 AND 2000 
2

をインデックスを使用する場合は、次のように提案します:

SELECT * 
FROM myTable 
WHERE Category >= '1000' AND Category <= '2000' AND 
     LEN(Category) = 4; 

(最初の2つの条件がインデックスを使用することができる。)

確かに、長さ条件を使用すると、と比較された値にかなり特異的です。

データ構造を変更することを強くお勧めします。その後、製剤を

create index idx_mytable_category_int on mytable(category_int); 

alter table mytable add category_int as (try_convert(int, category)) persisted; 

あなたはその後、計算列にインデックスを追加することができます:あなたは、あなたがまだ計算列を使用することができますすることができない場合は

SELECT * 
FROM myTable 
WHERE Category_int >= 1000 AND Category_int <= 2000 

動作するはず良い。

関連する問題