2016-11-09 82 views
1

我与数据类型为varchar一个表,用于存储版本numbers.I需要过滤和选择小于等于5筛选记录时,列类型为varchar

唯一版本号有一列输入

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除了版本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
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 
+0

完美的感谢,也适用,如果我有数据5.0版。 –

+0

@inquisitive_mind乐于助人。我怀疑你只是过​​度思考 –

+0

是的,的确,我确实在过度思考它。有时候解决方案非常简单。再次感谢。 –

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