将varchar更改为int

时间:2017-08-01 17:22:29

标签: sql sql-server

我有一个Senario,我不知道如何解决。

我有像这个例子的数据库 的 myTable

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

“类别”中的所有记录都是数字,但格式为varchar。 我无法将类型从varchar更改为int。

我需要的是在我的SQL查询中将varchar转换为可能的int。 因为,我需要做点喜欢的事情

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

这怎么可能?

对不起我的书面英语,但我希望你能理解:)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 

应该可以正常工作。