2015-04-15 186 views
2

好的,比方说,我想筛选一个以X.X.X格式存储版本号的表。SQL Server按版本筛选

如果我只想过滤单个版本号,这非常简单。

where version = '3.12.92' 

作为一个例子。

但是如果我正在寻找某个范围的版本,例如从'2.21.23'到'3.12.92?'根据版本范围进行过滤最简单但最可靠的解决方案是什么?

编辑:改变表的格式已经太晚了。这张桌子已有数百万个参赛作品。

+0

可能重复的[如何使用SQL Serv比较软件版本呃?](http://stackoverflow.com/questions/11364242/how-to-compare-software-versions-using-sql-server) –

+5

真正的解决方案是修复你的表格设计,那么你的搜索将是微不足道的。切勿将多个值组合在一个列中,您将永远存在将它们分开的问题。如果您将版本的每个版块都放在不同的专栏中,则可以轻松完成此操作。 –

+0

为此,我正在搜索的表格有数百万条目。 – 11clock

回答

0

的解决办法是版本位为单独列速战速决则可以使用下面的查询分开

DECLARE @version VARCHAR(100) = '3.12.92'; 

SELECT REVERSE(PARSENAME(REVERSE(@version) , 1)) AS FirstBit 
     ,REVERSE(PARSENAME(REVERSE(@version) , 2)) AS MiddleBit 
     ,REVERSE(PARSENAME(REVERSE(@version) , 3)) AS LastBit 

结果:

FirstBit MiddleBit LastBit 
    3   12   92 

你的WHERE子句,其中第一位= 3会看起来像....

WHERE REVERSE(PARSENAME(REVERSE(@version) , 1)) = '3' 
0

如果总是有三个由点分隔的最多两位数字编号,您可以编写函数将x.y.z转换为x*10000 + y*100 + z形式的整数。