我有一个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
这怎么可能?
对不起我的书面英语,但我希望你能理解:)
答案 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
应该可以正常工作。