从sql select语句中删除非数字值以及结束小数点

3yhwsihp  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(373)

我的一个表中有一个应用程序版本列。大多数值都是标准版本,比如2020.2.0,但有些值上有预发布标签(2020.2.0.pr)。
下面返回表中的最新条目:

SELECT version
from dbo.server_log_entry
where server_log_entry_id = (SELECT MAX(server_log_entry_id) from dbo.server_log_entry)

在本例中,它返回:
2020.2.0.公共关系
我正在编写一个脚本,将db表中的最新版本与文件中的版本进行比较,以确保两者兼容。脚本获取文件中的版本并将其转换为[version]对象。我想对数据库进行powershell查询,并将值拉入version对象,但是在删除pr标记之前的“.”时遇到了一些问题。目前我有:

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 LEFT(SUBSTRING(@databaseVersion, PATINDEX('%[0-9.-]%', @databaseVersion), 8000),
    PATINDEX('%[^0-9.-]%', SUBSTRING(@databaseVersion, PATINDEX('%[0-9.-]%', @databaseVersion), 8000) + 'X') -1)

这会给我一个
2020.2.0.
我想删除结束期间,以便查询返回
2020.2.0
然而,我不太清楚如何做到这一点,或者如果我这样做的方式是错误的。

2uluyalo

2uluyalo1#

经过一番尝试/错误后,我发现下面的方法是我所需要的

"SELECT DISTINCT SUBSTRING([version], 0, CASE WHEN PATINDEX('%.[^0-9.]%', [version]) <> 0 THEN PATINDEX('%.[^0-9.]%', [version]) ELSE 100 END) FROM dbo.server_log_entry
jtjikinw

jtjikinw2#

也许 REPLACE( ver, '.PR','') ```
SELECT replace( version, '.PR','')
from dbo.server_log_entry
where server_log_entry_id = (SELECT MAX(server_log_entry_id) from dbo.server_log_entry)

zd287kbt

zd287kbt3#

您可以使用reverse和charindex来获得结果。

declare @databaseVersion VARCHAR(100) = '2020.2.0.PR'
SELECT REVERSE(RIGHT(REVERSE(@databaseVersion),
LEN(@databaseVersion)-CHARINDEX('.',REVERSE(@databaseVersion))))

2020.2.0

相关问题