我有一张表,以多点字符串形式存储版本信息,即“4.1.345.08”、“5.0.1.100”等。我正在寻找找出哪个更大的最快方法。有没有比我在下面提出的方法更快或更容易的方法?需要注意的是,我 90% 确定我们应该只在这里找到点分数值,但我不能保证将来会这样。
DECLARE @str1 nvarchar(max)='15.0.4000.8'
DECLARE @str2 nvarchar(max)='15.6.4000.8'
SELECT
CASE
WHEN PARSENAME(@str1, 4) > PARSENAME(@str2, 4)
THEN @str1
WHEN PARSENAME(@str1, 4) < PARSENAME(@str2, 4)
THEN @str2
ELSE CASE
WHEN PARSENAME(@str1, 3) > PARSENAME(@str2, 3)
THEN @str1
WHEN PARSENAME(@str1, 3) < PARSENAME(@str2, 3)
THEN @str2
ELSE CASE
WHEN PARSENAME(@str1, 2) > PARSENAME(@str2, 2)
THEN @str1
WHEN PARSENAME(@str1, 2) < PARSENAME(@str2, 2)
THEN @str2
ELSE CASE
WHEN PARSENAME(@str1, 1) > PARSENAME(@str2, 1)
THEN @str1
WHEN PARSENAME(@str1, 1) < PARSENAME(@str2, 1)
THEN @str2
ELSE NULL
END
END
END
END
也许在眼睛上更容易一些。它依赖于我可以从您的示例数据中得出的推论(三个八位字节小于 100,一个大于 1000)——您可能需要调整乘数以反映实际数据中的任何差异。我怀疑性能会有什么不同,但是根据您运行这些比较的频率,您可以考虑使用计算/持久列来存储计算。
结果: