如何修改SQL语句移除版本号结果末尾的多余小数点?
处理SQL版本字符串,移除末尾多余小数点
我明白你现在的困扰:从数据库提取带预发布标签的版本号后,当前SQL处理出来的结果末尾多了个小数点(比如2020.2.0.),没法直接转换成PowerShell的[version]对象做兼容性对比。
先说说为什么会出现这个问题:你的原SQL语句会截取版本号里所有数字和小数点的部分,直到遇到第一个非数字/小数点的字符(比如PR里的P)。但原版本2020.2.0.PR中,P前刚好有个小数点,所以截取结果就把这个末尾的小数点也包含进来了。
这里给你修改后的SQL语句,直接在原结果基础上去掉末尾的小数点:
DECLARE @databaseVersion NVARCHAR(30) SET @databaseVersion = (SELECT version from dbo.server_log_entry where server_log_entry_id = (SELECT MAX(server_log_entry_id) from dbo.server_log_entry)) SELECT RTRIM( LEFT( SUBSTRING(@databaseVersion, PATINDEX('%[0-9.-]%', @databaseVersion), 8000), PATINDEX('%[^0-9.-]%', SUBSTRING(@databaseVersion, PATINDEX('%[0-9.-]%', @databaseVersion), 8000) + 'X') -1 ), '.' )
核心改动是在最外层加上了RTRIM(..., '.'):SQL Server的RTRIM函数支持第二个参数,专门用来移除字符串末尾指定的字符。这样不管处理后的字符串末尾有没有多余的小数点,都会被清理掉,最终得到干净的2020.2.0,可以直接转成PowerShell的[version]对象使用。
内容的提问来源于stack exchange,提问作者Oxyauna
相关产品推荐
相关产品推荐

