Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
BKV88 Member Откуда: Москва Сообщений: 243 |
Добрый день! есть задача удалить лишние пробелы в строке с фамилией и именем. решил поэксперементировать создав тестовые данные. написал скрипт через функцию replace и перебор строк курсором. Вот что получилось create table #t ( id int identity not null, Name varchar(50) null) insert into #t (name) values('Иванов Иван') insert into #t (name) values('Сидоров Петр') insert into #t (name) values('Петров Дмитрий') insert into #t (name) values('Чижиков Иван') insert into #t (name) values('Пупкин Сергей') insert into #t (name) values('Слонов Слон') declare @str varchar(50) declare @name varchar(50) declare @id int DECLARE otpr_cursor CURSOR LOCAL FOR Select id,name from #t OPEN otpr_cursor FETCH NEXT FROM otpr_cursor INTO @id,@name WHILE @@FETCH_STATUS = 0 BEGIN set @str= @name Update #t SET name=Replace(@str,' ',' ') where id=@id FETCH NEXT FROM otpr_cursor INTO @id,@name END CLOSE otpr_cursor DEALLOCATE otpr_cursor select * from #t drop table #t Все работает учитывая, что в тестовых данных 6 строк.
Есть сомнения, что на больших объемах replace+ курсор будут иметь не большую производительность. Какие есть еще способы решить поставленную передо мной задачу? |
|||||||||||||||
22 ноя 14, 12:15 [16889256] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
О, хоспаде, зачем столько букв?while 2*2 = 4 begin update a SET name=Replace(a.name,' ',' ') from a if @@rowcount = 0 break end |
22 ноя 14, 12:23 [16889272] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Дальше можно изгаляться с условиями, чтобы не гонять апдейт по всем строкам. |
22 ноя 14, 12:25 [16889278] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6116 |
select replace( replace( replace(name, ' ', ' '+char(7)), char(7)+' ', ''), char(7), '') from ( values ('Иванов Иван'), ('Сидоров Петр'), ('Петров Дмитрий'), ('Чижиков Иван'), ('Пупкин Сергей'), ('Слонов Слон') ) v(name) |
22 ноя 14, 12:38 [16889309] Ответить | Цитировать Сообщить модератору |
BKV88 Member Откуда: Москва Сообщений: 243 |
Гавриленко Сергей Алексеевич, Букв столько от незнания альтернативных вариантов решения))Только учусь... Не совсем понял, какое условие можно применить в while, чтобы завершалось обновление при изменении последний строки в таблице. |
22 ноя 14, 12:55 [16889361] Ответить | Цитировать Сообщить модератору |
BKV88 Member Откуда: Москва Сообщений: 243 |
Сон Веры Павловны, Спасибо так даже лучше. Не учел, что количество пробелов может быть >2 |
22 ноя 14, 12:56 [16889363] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Удаление лишних пробелов из строки |
||
22 ноя 14, 16:04 [16889972] Ответить | Цитировать Сообщить модератору |
BKV88 Member Откуда: Москва Сообщений: 243 |
iap, Ну для кого-то древний баян, а для кого-то новое. |
22 ноя 14, 16:14 [16890005] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
|
||
22 ноя 14, 16:19 [16890014] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |