2015-07-20 80 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部分,你可以使用parsename https://msdn.microsoft.com/en-us/library/ms188006.aspx –