我希望这是一个简单的答案,但我无法弄清楚要搜索的正确术语。
我想在任何公司名称和“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
也已存在。
答案 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)$';