В зависимости от того, что находится в вашей строке, вы можете злоупотребить PARSENAME. Предназначен для разбиения имен вроде adventureworks.dbo.mytable.mycolumn
. Он работает следующим образом:
DECLARE @x as VARCHAR(100) = 'aaaa.bbb.cccc.ddddd'
SELECT CONCAT( PARSENAME(@x,4), '-', PARSENAME(@x,3) )
. Вы также можете посмотреть комбинацию STUFF, чтобы удалить первый '.' и замените на '-', затем оставьте результат по индексу следующего '.' но вряд ли это будет лучше, чем это или предложение Кевина. Использование разбиения строк, вероятно, будет слишком громоздким:
SELECT CONCAT(MAX(CASE WHEN rn = 1 THEN v END), '-', MAX(CASE WHEN rn = 2 THEN v END))
FROM (
SELECT row_number () over (order by (select 0)) rn, value as v
FROM string_split(@x,'.')
) y WHERE rn IN (1,2)
Поскольку строка разбивается на строки, которые затем необходимо пронумеровать, чтобы отфильтровать и вытащить части ты хочешь. Это также зависит от строк, выходящих из разделения строк в порядке, в котором они были в исходной строке, , что MS не гарантирует, будет иметь место