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

Откуда: Абхазия, Сухум
Сообщений: 314
Прошу прощения за возможно нубовский вопрос - как запросом отредактировать поле от лишних пробелов?
Поле - ФИО, к примеру 'Степанов Алексей Борисович '.
Пробел может быть в любом месте - в начале, между и после.

Как составить запрос UPDATE?

UPDATE
    CONTRACT
SET
    NAME = ?
WHERE
    NAME LIKE '%  %'
8 апр 09, 14:56    [7039455]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Не уточнил, нужно удалить пробелы там, где их более 1-го. Ну и соответственно начальные и концевые.
8 апр 09, 14:58    [7039476]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
Alexander Warlord,

TRIM()
обрежет слева и справа.
для "внутри убрать дубли пробелов", если операция разовая, то можно несколько раз запустить
update
  set f = replace(trim(f), '  ', ' ')
  where (f like '%  %' or f <> trim(f))
    and f is not null
8 апр 09, 15:00    [7039496]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
nxx
Member

Откуда:
Сообщений: 2030
Alexander Warlord
Не уточнил, нужно удалить пробелы там, где их более 1-го. Ну и соответственно начальные и концевые.


replace(replace(replace(replace(name,' ','#'),' ','&'),'#',''),'&',' ')

'#', '&'
любые символы которых у вас нет

ЗЫ работоспособность не проверял
8 апр 09, 15:03    [7039526]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Полночный
Member

Откуда:
Сообщений: 312
Alexander Warlord,
UPDATE Contract
   SET Name = regexp_replace (Name, ' {2,}', ' ')
 WHERE regexp_instr (Name, ' {2,}') != 0;
8 апр 09, 15:04    [7039537]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Полночный
Alexander Warlord,
UPDATE Contract
   SET Name = regexp_replace (Name, ' {2,}', ' ')
 WHERE regexp_instr (Name, ' {2,}') != 0;


Почему-то выдаёт:
ORA-00904: REGEXP_INSTR : invalid identifier
8 апр 09, 15:20    [7039686]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
stax..
Guest
nxx
Alexander Warlord
Не уточнил, нужно удалить пробелы там, где их более 1-го. Ну и соответственно начальные и концевые.


replace(replace(replace(replace(name,' ','#'),' ','&'),'#',''),'&',' ')

'#', '&'
любые символы которых у вас нет

ЗЫ работоспособность не проверял

Violina
.....
stax
8 апр 09, 15:22    [7039716]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Nicks
Member

Откуда:
Сообщений: 124
Alexander Warlord

Почему-то выдаёт:
ORA-00904: REGEXP_INSTR : invalid identifier

эта функция доступна только Oracle 10
8 апр 09, 15:24    [7039745]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
stax..
nxx
Alexander Warlord
Не уточнил, нужно удалить пробелы там, где их более 1-го. Ну и соответственно начальные и концевые.


replace(replace(replace(replace(name,' ','#'),' ','&'),'#',''),'&',' ')

'#', '&'
любые символы которых у вас нет

ЗЫ работоспособность не проверял

Violina
.....
stax


+5
8 апр 09, 15:30    [7039806]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Действительно, +5!

Итоговый запрос такой:

UPDATE Contract
SET Name = REPLACE(REPLACE(REPLACE(Name, ' ', ' _'), '_ '), '_')
WHERE CLNT_ID IN (84312,84313,84314)

Для страховки попробовал на 3-х записях. Всё получилось. Спасибо!!!
8 апр 09, 16:31    [7040442]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Elic
Member

Откуда:
Сообщений: 29990
Alexander Warlord
Итоговый запрос такой:
UPDATE Contract
SET Name = REPLACE(REPLACE(REPLACE(Name, ' ', ' _'), '_ '), '_')
WHERE CLNT_ID IN (84312,84313,84314)
Всё получилось.
Alexander Warlord
начальные и концевые
8 апр 09, 16:37    [7040520]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Elic
Alexander Warlord
начальные и концевые

Главная задача была убрать лишние пробелы в "Междуречье" ;)
8 апр 09, 16:39    [7040537]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Побочный вопрос... - могут ли 5 индексов в сумме весить почти как вся таблица? Или тут что-то не так?..
Таблица - около 2 Гб, индексы - около 1,7 Гб.
8 апр 09, 17:26    [7040928]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Могут и больше
9 апр 09, 03:59    [7042172]     Ответить | Цитировать Сообщить модератору
 Re: Лишние пробелы  [new]
Karpol
Member

Откуда:
Сообщений: 90
Рассматривай индекс как вырезку из таблицы по полям на которых он сделан. Если индексы охватили все поля, то размеры практически сравняются, а если есть пересечения по полям (индексы по множеству полей), то может и больше быть
9 апр 09, 09:26    [7042445]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить