好的,比方说,我想筛选一个以X.X.X格式存储版本号的表。SQL Server按版本筛选
如果我只想过滤单个版本号,这非常简单。
where version = '3.12.92'
作为一个例子。
但是如果我正在寻找某个范围的版本,例如从'2.21.23'到'3.12.92?'根据版本范围进行过滤最简单但最可靠的解决方案是什么?
编辑:改变表的格式已经太晚了。这张桌子已有数百万个参赛作品。
好的,比方说,我想筛选一个以X.X.X格式存储版本号的表。SQL Server按版本筛选
如果我只想过滤单个版本号,这非常简单。
where version = '3.12.92'
作为一个例子。
但是如果我正在寻找某个范围的版本,例如从'2.21.23'到'3.12.92?'根据版本范围进行过滤最简单但最可靠的解决方案是什么?
编辑:改变表的格式已经太晚了。这张桌子已有数百万个参赛作品。
的解决办法是版本位为单独列速战速决则可以使用下面的查询分开
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'
如果总是有三个由点分隔的最多两位数字编号,您可以编写函数将x.y.z
转换为x*10000 + y*100 + z
形式的整数。
可能重复的[如何使用SQL Serv比较软件版本呃?](http://stackoverflow.com/questions/11364242/how-to-compare-software-versions-using-sql-server) –
真正的解决方案是修复你的表格设计,那么你的搜索将是微不足道的。切勿将多个值组合在一个列中,您将永远存在将它们分开的问题。如果您将版本的每个版块都放在不同的专栏中,则可以轻松完成此操作。 –
为此,我正在搜索的表格有数百万条目。 – 11clock