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

я могу получить все версии менее 5 путем преобразования первого символа столбца varchar. Однако я не могу понять, как включить версию 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 
Смежные вопросы