Обрезать первый ноль после точки дважды sql-запроса

Я пытаюсь сравнить версии сборки с помощью SQL Server, однако может быть больше одной версии, и мне нужно, чтобы она была в шестизначном формате.

Например, версия сборки 2.00.0001 и мне нужно, чтобы она возвращалась как 2.0.1 .

Могут быть версии вроде 1.01.0031 что мне нужно будет 1.1.31 .

Это работает, но есть ли лучший способ сделать это?

 select left(left([output],9),1)+'.'+substring(left([output],9),3,1)+'.'+substring(right(left([output],9),1),1,1) 

Используя функцию ParseName , вы можете добиться этого. Попробуй это –

 DECLARE @val VARCHAR(100) = '01.10.0031' SELECT CONVERT(VARCHAR, CONVERT(INT, PARSENAME(@val, 3))) + '.' + CONVERT(VARCHAR, CONVERT(INT, PARSENAME(@val, 2))) + '.' + CONVERT(VARCHAR, CONVERT(INT, PARSENAME(@val, 1))) 

результат

 1.10.31 

Для ограниченного количества нулей вы можете заменить .0 на . :

 select replace(replace(replace([output], '.00', '.'), '.0', '.'), '..', '.0.') 

Это немного взломать, но это относительно просто.

Поскольку шаблон всегда будет исправлен, вы можете использовать substring и cast для этого.

 select substring(col,1,1) + '.' cast(cast(substring(col,3,2) as int) as varchar(2)) + '.' cast(cast(substring(col,6,4) as int) as varchar(4)) from tablename 

Вот динамическое решение, которое будет работать с любым форматом, если нет альфа и '.' является разделителем.

 Create Function [dbo].[SplitString] ( @stringToSplit VARCHAR(MAX) ) RETURNS varchar(MAX) AS BEGIN DECLARE @name VARCHAR(MAX) DECLARE @pos INT Declare @Return Varchar(MAX) = '' WHILE CHARINDEX('.', @stringToSplit) > 0 BEGIN SELECT @pos = CHARINDEX('.', @stringToSplit) SELECT @name = Convert(Varchar(MAX), Convert(Int, SUBSTRING(@stringToSplit, 1, @pos-1))) Set @Return = @Return + @name + '.' SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)[email protected]) END RETURN @Return + Convert(Varchar(MAX), Convert(Int, @stringToSplit)) END 

 Declare @ver Varchar(100) = '7.00.0001' Select dbo.splitstring(@ver) 

Я считаю, что это должно работать до тех пор, пока шаблон содержит две десятичные точки и должен обрабатывать любое количество нулей в каждой позиции

 DECLARE @version VARCHAR(19) SET @version = '2.00.0001' SELECT CAST(CAST(SUBSTRING(@version,1,CHARINDEX('.',@version,1)-1) AS INT) AS VARCHAR(5)) + '.'+ CAST(CAST(SUBSTRING(@version,CHARINDEX('.',@version,1)+1,CHARINDEX('.',@version,CHARINDEX('.',@version,1) + 1)-CHARINDEX('.',@version,1)-1) AS INT) AS VARCHAR(5)) + '.' + CAST(CAST(SUBSTRING(@version,CHARINDEX('.',@version,CHARINDEX('.',@version,1) + 1)+1,LEN(@version)) AS INT) AS VARCHAR(5)) 
Interesting Posts

Выполнение задачи SQL работает в разработчике и SSMS, но ошибки в агенте SQL Server

Как удалить обозначение ROWGUID на столбце / ключ PK

пакетный файл для выполнения SQL-скриптов – без возврата каретки

Как найти, какие хранимые процедуры используют какие индексы?

SQL Server – установить поле в одно текстовое значение, если NULL, добавить другое текстовое значение, если нет

SQL найти дубликаты и присвоить номер группы

Совокупность даты начала и даты до последнего в MDX

Добавить оператор case, в котором пункт с датой между

Недопустимый тип данных varbinary (max)

Как работать с неподдерживаемыми целыми типами без знака в MS SQL?

Параметр возвращаемого значения SqlCommand

Как найти счетчик, который имеет несколько периодов

SQL: выберите столбцы только с значениями NULL

Как разделить минуты на дни, часы и минуты в tsql

Как узнать, какой пакет обновления установлен на SQL Server?

Давайте будем гением компьютера.