2014-02-07 122 views
0

我期望這是一個簡單的答案,但我無法找出正確的術語來搜索。Postgres正則表達式:add逗號

我想在任何公司名稱和「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

編輯: 也有適當的記錄用相應的逗號,即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

謝謝,這真的很接近。我忘記提及已經有適當逗號的記錄,即「COMPANY A,INC」和「COMPANY A INC」都存在。 –

+0

@DylanHettinger答案更新,以處理這種情況 – harmic

+0

非常感謝您的更新。你能告訴我這個術語用來描述'\ 1'和'\ 2'技術嗎? –