2016-11-09 79 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