Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Добавление пробела в строке между символами  [new]
kolyady
Member

Откуда:
Сообщений: 137
Доброго времени суток!
Есть задача
В строке по добавлять между символами пробелы
тобиш есть поле со значением "Бабушка" на выходе должно получиться "Б а б у ш к а".
Понятное дело что символов может быть разное количество.
Какие будут предложения?
6 июл 17, 17:16    [20620074]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
kolyady,

автор
Какие будут предложения?


а какие ваши?
6 июл 17, 17:23    [20620110]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7392
kolyady,

обработку производите клиентским приложением.
6 июл 17, 17:24    [20620118]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
kolyady
Member

Откуда:
Сообщений: 137
WarAnt,
были бы предложения не создавал бы топик
6 июл 17, 17:25    [20620124]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
kolyady
Member

Откуда:
Сообщений: 137
Владислав Колосов,
А средствами sql, есть возможность произвести подобное действие
6 июл 17, 17:27    [20620139]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady,

разобрать, собрать...

SELECT [CHR] + ' ' 
FROM
(
	SELECT
		[CHR] = substring(a.b, v.number+1, 1) 
	FROM  
	(SELECT  'Бабушка' b) a
	INNER JOIN 
		master..spt_values v 
	ON 
		v.number < len(a.b)
	WHERE  
		v.type = 'P'
) x
FOR XML PATH('')
6 июл 17, 17:38    [20620207]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
kolyady
Member

Откуда:
Сообщений: 137
TaPaK,
Спасибо ваш метод тоже работает
Правда я пока ждал через курсор тоже решил

declare @i int;
declare @iend int;
declare @name varchar(255);
declare @namecursor varchar(255);
set @i = 1;

set @iend = (select len('Бабушка'));

while @i<=@iend
begin

set @namecursor = (select concat(SUBSTRING('Бабушка',@i,1),' '))

set @i = @i + 1

set @name= concat(@name,@namecursor)

end;

select @name
6 июл 17, 17:50    [20620296]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
kolyady,

немного подправленный вариант от TaPaK
;with cte as (select 'Бабушка' b union all select 'Дедушка' b) 
select *, 
convert(varchar(100), (SELECT [CHR] + ' ' 
FROM
(
	SELECT
		[CHR] = substring(b, v.number + 1, 1) 
	FROM	 
		master..spt_values v 		
	WHERE  
		v.type = 'P'and v.number < len(b)
) x
FOR XML PATH(''), type))
from cte
6 июл 17, 18:03    [20620399]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
WarAnt
kolyady,

немного подправленный вариант от TaPaK
;with cte as (select 'Бабушка' b union all select 'Дедушка' b) 
select *, 
convert(varchar(100), (SELECT [CHR] + ' ' 
FROM
(
	SELECT
		[CHR] = substring(b, v.number + 1, 1) 
	FROM	 
		master..spt_values v 		
	WHERE  
		v.type = 'P'and v.number < len(b)
) x
FOR XML PATH(''), type))
from cte
А если так?
with cte as (select 'Баб<ушка' b union all select 'Дедуш&ка' b) 
select *, 
convert(varchar(100), (SELECT [CHR] + ' ' 
FROM
(
	SELECT
		[CHR] = substring(b, v.number + 1, 1) 
	FROM	 
		master..spt_values v 		
	WHERE  
		v.type = 'P'and v.number < len(b)
) x
FOR XML PATH(''), type))
from cte
6 июл 17, 19:15    [20620725]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
Strangers_2
Member

Откуда:
Сообщений: 3
Коряво, но вроде работает

DECLARE @test table (txt varchar(100))

INSERT INTO @test
select 'Баб<ушка'
union all select 'Дедуш&ка'
union all select 'Бабушка'
union all select 'Дедушка'

;with asd as
(SELECT k.[txt], LEN(k.[txt]) len_,  CAST(substring(k.[txt], v.number, 1) as varchar(100)) as Letter, v.number
FROM @test k
	JOIN master..spt_values v ON v.type = 'P'and v.number between 1 and len([txt])
union all	
SELECT k.[txt], LEN(k.[txt]) len_, CAST(z.Letter + ' ' + substring(k.[txt], v.number, 1) as varchar(100)) as Letter, v.number
FROM @test k
	JOIN master..spt_values v ON v.type = 'P'and v.number between 1 and len([txt])
	JOIN asd z ON z.[txt] = k.[txt] and z.number + 1 <= v.number)
SELECT k.[txt], RTRIM(k.[Letter]) as [space]
FROM asd k
	JOIN (SELECT [txt], MAX(LEN([Letter])) as len_ FROM asd GROUP BY [txt]) z ON z.[txt] = k.[txt] and z.len_ = LEN([Letter])
7 июл 17, 16:36    [20624067]     Ответить | Цитировать Сообщить модератору
 Re: Добавление пробела в строке между символами  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
Strangers_2,

на самом деле варианты с FOR XML PATH('') хорошие, но не надо кастить результат к строке.
годится, например, .value('.','nvarchar(max)'), применямая к результату типа XML.
7 июл 17, 18:18    [20624435]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить