我有一个表,用于存储客户端上安装的软件版本。我需要返回最高版本值。 MAX(versionValue)不返回最高值,因为该值的格式为2.3.0.99。如果最高值为2.3.0.122,则MAX返回2.3.0.99作为最高值,这不是真的。我确定这是非常微不足道的,我刚刚碰壁,谷歌现在没有帮助。任何见解都将不胜感激。
答案 0 :(得分:0)
如果您可以更改数据库架构并假设版本始终遵循相同的格式,则可以为
添加四个新列主要,次要,构建,修订
然后这些都是整数,然后你可以用户字符串连接给出版本号2.3.0.122或使用arithmatic来获取最大版本例如
(Major * 1000)+(Minor * 100)+(Build * 10)+ Revision
唯一的问题是它需要进行全表扫描以找出最高的是什么,并且可能存在次要版本高到超过主要版本的问题。
但我相信你明白了。
答案 1 :(得分:0)
您遇到的问题是因为您将4条信息存储在一列中,现在需要分解成组成部分。
理想情况下,您应该将表格放入1NF,即将它们分成4个int
列(然后在它们上面放置一个复合索引)。
你可以有一个(非持久的)计算列来连接它们以用于显示目的。
如果无法做到这一点,则以下内容不会受到影响,但可以胜任。
DECLARE @versions TABLE (
version_number varchar(15),
productid int )
INSERT INTO @versions
SELECT '2.3.0.122',1 UNION ALL
SELECT '2.3.0.99',1 UNION ALL
SELECT '2.3.0.122',2 UNION ALL
SELECT '2.4.0.99',2;
WITH cte
AS (select productid,
version_number,
ROW_NUMBER() over (partition by productid
order by CAST('/' +
version_number + '/' AS hierarchyid) desc) AS RN
FROM @versions)
SELECT productid,
version_number
FROM cte
WHERE RN = 1
答案 2 :(得分:0)
谢谢大家。我最终在CLR中创建了一个UDF。数据库与第三方产品相关联,因此重建模式不是一种选择。