使用正则表达式更新PostgreSQL字段的查询

19

我的“Street_Address_1”列中有以下数据:

123 Main Street

使用Postgresql,如何编写查询语句来更新我的地址表中的“Street_Name”列?换句话说,“Street_Name”为空,我想用包含在“Street_Address_1”列中的街道名称填充它。

据我所知,我想使用“regexp_matches”字符串方法。不幸的是,我没有太多的运气。

注意:您可以假设所有地址都采用“街道号码 街道名称 街道类型”的格式。

2个回答

28

如果您只想获取Street_Address_1并删除所有前导数字,可以执行以下操作:

UPDATE table
SET street_name = regexp_replace(street_address_1, '^[0-9]* ','','');

这段代码获取了变量street_address_1的值,并将其前面的所有数字(包括一个空格)替换为空字符串,第四个参数是用于可选的正则表达式标志,如“g”(全局匹配)和“i”(不区分大小写)。

这个版本允许像“1212 15th Street”这样的地址正常工作。


24

类似于...的东西:

UPDATE table
SET Street_Name = substring(Street_Address_1 FROM '^[0-9]+ ([a-zAZ]+) ')

请参见PGSQL 8.3.7文档中相关章节,在该章节开始不久后就详细介绍了substring函数的形式。


这个正则表达式不起作用。在这种情况下,我与正则表达式的斗争比查询更加困难。 - Huuuze
更像是“^[0-9]+([a-zA-Z ]+)”。 - Milen A. Radev
返回地址中的“123 Main”部分,我只想要“Main”。 - Huuuze
只翻译第一次出现的文本内容。街道名称是否由两个单词组成并不重要(例如:123 Grand Central Avenue)。 - Huuuze
这个正则表达式是 - '^[0-9]+ (.*) [a-zA-Z ]+$' - Milen A. Radev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接