2017-08-01 96 views
0

我有一个senario,我不知道如何解决。更改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 

这怎么可能?

对不起我的书面英语,但我希望你明白反正:)

回答

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; 

(前两个条件可以使用索引。)

诚然,长度条件是相当特定于您所比较的值。

我强烈建议你改变你的数据结构。如果你不能,你仍然可以使用计算列:

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

然后可以计算列上添加索引:

create index idx_mytable_category_int on mytable(category_int); 

然后配方:

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

应工作精细。