我需要通过删除街道名称右侧的所有内容来清理PostgreSQL 8.4中的地址字段。这包括放弃套房(“100 Broadway Street Suite 100”)并更正街道名称(“100 Broadway Street100”)附加单位编号的名称,以便两种情况下的结果都是“百老汇街100号”。
基本上我试图删除“街道”右侧的所有内容。如果不对每种情况单独编码,我似乎无法使用替换功能。 rtrim
函数也不起作用,因为我想删除的字符是通配符。
以下是我想要开始工作的内容:
update *tablename* set *fieldname* = replace (*fieldname*, '%STREET%', '%STREET')
下面这个SQL有效,但我不想编写每个可能的组合:
UPDATE *tablename* set *fieldname* = replace (*fieldname*, ' SUITE 100', '');
UPDATE *tablename* set *fieldname* = replace (*fieldname*, ' STREET100', ' STREET');
如何删除字符串“Street”右侧的所有内容,而不明确指定“Street”后面的内容?
感谢您的帮助。
答案 0 :(得分:1)
尝试这样的事情:
SELECT regexp_replace('100 broadway street 100', '(.*)(Street).*', '\1\2', 'i');
上面基本上是在找" Street" (根据最后一次' i' agrument的情况不敏感,然后在" Street"之后剥离一切,我认为这是你要求的。有关详细信息,请参阅http://www.postgresql.org/docs/current/static/functions-matching.html。
答案 1 :(得分:0)
这会在' STREET'
的第一个实例之后截断UPDATE tablename
SET fieldname = SUBSTR(fieldname, 1, position('STREET' IN fieldname) + 5)
WHERE fieldname LIKE '%STREET%'
更新:如果希望对" STREET"进行不区分大小写的搜索:
UPDATE tablename
SET fieldname = SUBSTR(fieldname, 1, position('STREET' IN UPPER(fieldname)) + 5)
WHERE UPPER(fieldname) LIKE '%STREET%'