Удалить нечисловое значение c из оператора SQL Select вместе с конечной десятичной точкой - PullRequest
0 голосов
/ 09 июля 2020

У меня есть столбец версии приложения в одной из моих таблиц. Большинство значений являются стандартными версиями, например 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.PR

Я работаю над скриптом, который сравнит последнюю версию в таблицу БД к версии в файле, чтобы убедиться, что они совместимы. Сценарий берет версию из файла и преобразует ее в объект [версия]. Я хотел бы иметь запрос PowerShell к базе данных и извлекать значение для объекта версии, однако у меня возникли проблемы с удалением '.' перед тегом 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

, однако я не совсем уверен, как это сделать, или если я собираюсь сделать это неправильно.

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

После некоторых проб / ошибок я обнаружил, что следующее работает так, как мне нужно

"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
0 голосов
/ 10 июля 2020

Вы можете использовать REVERSE с CHARINDEX для получения результата.

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

2020.2.0

0 голосов
/ 09 июля 2020

возможно 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)
...