2015-07-20 5 views
0

Я выполняю запросы, и они не смотрят на весь номер при использовании операторов> и <, поэтому в этом примере результаты неверны, поскольку они смотрят на 1, а не 10 в первом октете. Вот запрос и выдержка из результатов.SQL больше, чем & меньше, чем операторы, не возвращает правильных результатов

select distinct v1.name, v1.[user], t1.displayversion from vComputer v1 
inner join Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
where t1.DisplayName like 'Symantec Enterprise Vault%' and t1.DisplayVersion < '9.0.13509' 

Результаты:

name   user   displayversion 
ATVIEL-PB0225L4 bunger   10.0.17573 
ATVIEL-PB0225LH fmotedayen  10.0.17573 
ATVIEL-PB036MTR skoeroezsi  10.0.17573 
ATVIEL-PB036MTS criesenhuber 10.0.17573 
ATVIEL-PC00768L skaehler  10.0.17573 

Как я могу это исправить?

+0

возможно дубликат [Как сравнить версии программного обеспечения с использованием SQL Server?] (Http://stackoverflow.com/questions/11364242/how-to-compare-software-versions-using-sql-server) – jpw

+0

В качестве быстрого взлома вы можете * быть в порядке, просто снимая самые правые 5 символов и сравнивая номера строчек. – shawnt00

+0

Хотя вопрос, который я обозначил как дубликат, не является идеальным ответом, ответы на этот вопрос должны быть полезны для вас. – jpw

ответ

1

Проблема в том, что вы сравниваете строки, и это будет сделано в алфавитном порядке. Вы в основном 2 варианта:

  1. Сплит номер версии на части, так что вы можете преобразовать каждый из них в количестве и имеют 3 поля в порядке (или что-то максимальное количество деталей в версии)

  2. Сохраните номера версий с ведущими нулями, так что алфавитный порядок совпадает с порядковым номером.

+0

Спасибо за ответ. Вы могли бы предоставить пример предлагаемого запроса, чтобы получить результаты, которые я ищу? – user3009669

+0

@ user3009669 Если версия имеет макс. 4 части, вы можете использовать parseame https://msdn.microsoft.com/en-us/library/ms188006.aspx –

Смежные вопросы