2014-02-07 2 views
0

Я ожидаю, что это простой ответ, но я не могу найти правильные условия для поиска.Postgres regex: добавить запятую

Я хочу добавить запятую между любым названием компании и "INC" (или, как это может быть, "LLC", "LP" и т. Д.). Например, я хочу 'COMPANY INC' быть 'COMPANY, INC', где 'COMPANY' может быть любое название вашей компании. У него могут быть буквы, цифры, но, вероятно, не специальные символы.

REGEXP_REPLACE("COMPANY A LP', '[a-zA-Z0-9] LP', ', LP'), конечно, только возвращает 'COMPANY , LP'; как я могу сохранить A так, чтобы он возвращал COMPANY A, LP?

EDIT: Имеются также уже действующие записи с соответствующей запятой, то есть COMPANY A, INC также уже существует.

ответ

1

Это похоже на работу:

test=> select REGEXP_REPLACE('COMPANY A LP', ' LP$', ', LP'); 
regexp_replace 
---------------- 
COMPANY A, LP 
(1 row) 

Это даже лучше:

test=> select REGEXP_REPLACE('COMPANY A LP', ' (INC|LP|LLC)$', ', \1'); 
regexp_replace 
---------------- 
COMPANY A, LP 
(1 row) 

test=> select REGEXP_REPLACE('COMPANY A INC', ' (INC|LP|LLC)$', ', \1'); 
regexp_replace 
---------------- 
COMPANY A, INC 
(1 row) 

(работает для любого из суффиксов вы упоминали, в одном операторе).

Или, если в соответствии с комментариями, некоторые записи уже есть запятые:

test=> select REGEXP_REPLACE('COMPANY A, INC', '([^,]) (INC|LP|LLC)$', '\1, \2'); 
regexp_replace 
---------------- 
COMPANY A, INC 
(1 row) 

test=> select REGEXP_REPLACE('COMPANY A INC', '([^,]) (INC|LP|LLC)$', '\1, \2'); 
regexp_replace 
---------------- 
COMPANY A, INC 
(1 row) 

Другой способ справиться с этим, если вы обновляете таблицу таким образом, что все записи отформатирован равномерно, должен оставить те, которые не отформатированы некорректно:

UPDATE xxx 
SET company_name=REGEXP_REPLACE(company_name, ' (INC|LP|LLC)$', ', \1') 
WHERE company_name ~ '[^,] (INC|LP|LLC)$'; 
+0

Спасибо, это действительно близко. Я забыл упомянуть, что уже есть записи с соответствующей запятой, т. Е. Существуют «КОМПАНИЯ A, INC» и «КОМПАНИЯ A INC». –

+0

@ DylanHettinger Ответ обновлен, чтобы обработать этот случай – harmic

+0

Отлично, спасибо за обновление. Можете ли вы рассказать мне, что означает термин «\ 1» и «\ 2»? –

Смежные вопросы