Postgres正则表达式:添加逗号

时间:2014-02-07 04:46:07

标签: regex postgresql postgresql-9.2

我希望这是一个简单的答案,但我无法弄清楚要搜索的正确术语。

我想在任何公司名称和“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 个答案:

答案 0 :(得分: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)$';