我有一个正在创建的 MS SQL 查询,我需要根据版本号确定特定记录是否属于“新”或“旧”类别。
有一列“VersionNum”,旧版本是 2.75.99.99 及以下的任何版本号,而新版本是 2.76.00.00 及以上的任何版本号。该列的数据类型是 varchar(20)。
我正在考虑从 X.XX 中获取字符串的一个子集并将其转换为小数。然后,一旦所有版本都转换为 X.XX 十进制,我可以通过在 select 中的 case 语句中执行 > 或 < 来确定旧版本或新版本。
这是决定版本号落在哪里的正确或理想的方法吗?或者有没有其他方法。我只是问,因为我会想象在其他地方需要类似的东西,这不是一个独特的情况。
编辑:另一个问题。有一些不是 X.XX.XX.XX (2.76.00.00) 的版本,还有一些是 8.00.00 的形式,将被视为“旧”版本。这比我曾经想象的更让系统感到困惑。我确实得到了 5 位版本 (8.00.00) 一直被认为是旧版本的信息。因此,只要有 5 个数字,版本就旧了。所以我想我会执行一个类似于以下的案例陈述:
SELECT
Old = CASE WHEN LEN(VersionNum) < 10 THEN 1
WHEN CAST(SUBSTRING(VersionNum,1,4) AS DECIMAL(5,2)) < 1.52
AND LEN(VersionNum) >= 10 THEN 1
ELSE 0
END,
New = CASE WHEN CAST(SUBSTRING(VersionNum,1,4) AS DECIMAL(5,3)) >= 1.52
AND LEN(VersionNum) >= 10 THEN 1
ELSE 0
END
FROM
VersionTable
我的逻辑正确吗?或者我错过了什么。长度的不等式非常烦人。