当列类型为varchar时,根据数值过滤记录

时间:2016-11-09 22:29:16

标签: sql sql-server

我在表中有一个列,其数据类型为varchar,用于存储版本号。我需要过滤并仅选择小于等于5的版本号

输入

5.0.0.330
Eclair
5.0.0
5.0.0.591
5.0.0.405
6.0.0.522
4.0.2
7.1.0.205
5.0.0.592
2.3.4-ez
4.2.2-2013-12-11-V1.0
4.6.0.304
nubernel-2.6.35_v0.0.1
2.1-update1
2.3

输出

5.0.0
4.0.2
2.3.4-ez
4.2.2-2013-12-11-V1.0
4.6.0.304
2.1-update1
2.3

我可以通过转换varchar列的第一个字符来获得小于5的所有版本。但是我无法弄清楚如何在结果集中包含5.0.0版本。

select distinct os_ver,substring(os_ver,1,1)  
from 
    dbo.mytable 
where 
    os_ver like '[0-9]%' and cast (substring(os_ver,1,1) as int) < 5

除了版本5.0.0

之外,这给了我所有小于5的版本
4.0.2
2.3.4-ez
4.2.2-2013-12-11-V1.0
4.6.0.304
2.1-update1
2.3

2 个答案:

答案 0 :(得分:1)

Select * 
 From  dbo.mytable 
 Where os_ver<='5.0.0'

返回

os_ver
5.0.0
4.0.2
2.3.4-ez
4.2.2-2013-12-11-V1.0
4.6.0.304
2.1-update1
2.3

答案 1 :(得分:0)

试试这个条件。

select * from (
select '5.0.0.330' as a  union
select 'Eclair' union
select '5.0.0' union
select '5.0.0.591' union
select '5.0.0.405' union
select '6.0.0.522' union 
select '4.0.2' union
select '7.1.0.205' union
select '5.0.0.592' union
select '2.3.4-ez' union
select '4.2.2-2013-12-11-V1.0' union
select '4.6.0.304' union
select 'nubernel-2.6.35_v0.0.1' union
select '2.1-update1' union
select '2.3') b
where a <= '5.0.0' and ISNUMERIC(SUBSTRING(a, 1, 1)) = 1