Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление лишних пробелов в строке  [new]
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 строк.

id Name
1 Иванов Иван
2 Сидоров Петр
3 Петров Дмитрий
4 Чижиков Иван
5 Пупкин Сергей
6 Слонов Слон


Есть сомнения, что на больших объемах replace+ курсор будут иметь не большую производительность.
Какие есть еще способы решить поставленную передо мной задачу?
22 ноя 14, 12:15    [16889256]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
Гавриленко Сергей Алексеевич
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]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
Дальше можно изгаляться с условиями, чтобы не гонять апдейт по всем строкам.
22 ноя 14, 12:25    [16889278]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
select
  replace(
    replace(
      replace(name, '  ', ' '+char(7)),
      char(7)+' ', ''),
    char(7), '')
from (
  values
    ('Иванов       Иван'),
    ('Сидоров   Петр'),
    ('Петров                    Дмитрий'),
    ('Чижиков    Иван'),
    ('Пупкин   Сергей'),
    ('Слонов Слон')
) v(name)
22 ноя 14, 12:38    [16889309]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Гавриленко Сергей Алексеевич,

Букв столько от незнания альтернативных вариантов решения))Только учусь...
Не совсем понял, какое условие можно применить в while, чтобы завершалось обновление при изменении последний строки в таблице.
22 ноя 14, 12:55    [16889361]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Сон Веры Павловны,
Спасибо так даже лучше.
Не учел, что количество пробелов может быть >2
22 ноя 14, 12:56    [16889363]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
BKV88
Сон Веры Павловны,
Спасибо так даже лучше.
Не учел, что количество пробелов может быть >2
Вообще-то, тема - древний баян:
Удаление лишних пробелов из строки
22 ноя 14, 16:04    [16889972]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
BKV88
Member

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

Ну для кого-то древний баян, а для кого-то новое.
22 ноя 14, 16:14    [16890005]     Ответить | Цитировать Сообщить модератору
 Re: Удаление лишних пробелов в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
BKV88
iap,

Ну для кого-то древний баян, а для кого-то новое.
Есть ещё поиск по форуму
22 ноя 14, 16:19    [16890014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить