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

Откуда: Чебаркуль
Сообщений: 4184
Есть таблица, содержит строки со словами, разделенными пробелом.
Хотелось бы апдейтнуть таблицу, записав в suffix последнее слово, а в prefix начало строки без последнего слова

declare @words table
(
id int not null identity(1,1), 
string nvarchar(1024), 
prefix nvarchar(1024),
suffix nvarchar(1024)
)

insert into @words(string)
select N'q00'
union all
select N'q11 w11'
union all
select N'q22 w22'
union all
select N'q33 w33 e33'
union all
select N'q44 w44 e44 r44'
union all
select N'q55 w55 e55 r55 t55'

select * from @words
3 май 16, 18:28    [19131098]     Ответить | Цитировать Сообщить модератору
 Re: Как разделить строку на части  [new]
o-o
Guest
Строке сделать reverse, найти первый пробел, поделить на 2 части, используя left + right + charindex пробела, обратно каждой части reverse
3 май 16, 18:59    [19131136]     Ответить | Цитировать Сообщить модератору
 Re: Как разделить строку на части  [new]
invm
Member

Откуда: Москва
Сообщений: 9837
select
 w.id, w.string, c.prefix, c.suffix
from
 @words w cross apply
 (select rtrim(ltrim(w.string))) as a(string) cross apply
 (select charindex(' ', reverse(a.string))) b(p) cross apply
 (select
   substring(a.string, 1, len(a.string) - b.p),
   substring(a.string, len(a.string) - b.p + 1, cast(0x7fffffff as int))
 ) c(prefix, suffix);
3 май 16, 19:42    [19131204]     Ответить | Цитировать Сообщить модератору
 Re: Как разделить строку на части  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
update @words set prefix = (select TOP 1 item from dbo.fn_splitter( string, ' ' ) order by id asc) where 1 < (select count(*) from dbo.fn_splitter( string, ' ' ))

update @words set suffix = (select TOP 1 item from dbo.fn_splitter( string, ' ' ) order by id desc) where 2 < (select count(*) from dbo.fn_splitter( string, ' ' ))
3 май 16, 20:06    [19131250]     Ответить | Цитировать Сообщить модератору
 Re: Как разделить строку на части  [new]
o-o
Guest
Lepsik
update @words set prefix = (select TOP 1 item from dbo.fn_splitter( string, ' ' ) order by id asc) where 1 < (select count(*) from dbo.fn_splitter( string, ' ' ))

update @words set suffix = (select TOP 1 item from dbo.fn_splitter( string, ' ' ) order by id desc) where 2 < (select count(*) from dbo.fn_splitter( string, ' ' ))

Это вместо реверса с откусыванием одного куска, отделенного пробелом, предлагается соорудить огород из функции, побить строку на уйму кусочков (а ну как у ТС 1000 пробелов в строке?), да еще их все пересчитать? И это для каждой строки?
Вах!
3 май 16, 21:46    [19131478]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить