【问题标题】:Postgresql query to update fields using a regular expression使用正则表达式更新字段的 Postgresql 查询
【发布时间】:2010-10-30 12:10:24
【问题描述】:

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

主街 123 号

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

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

注意:您可以假设所有地址都采用“StreetNumber StreetName StreetType”格式。

【问题讨论】:

    标签: sql regex postgresql


    【解决方案1】:

    类似...:

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

    参见relevant section from PGSQL 8.3.7 docssubstring 表格在该部分开始后不久详细说明。

    【讨论】:

    • 那个正则表达式不走运。在这种情况下,我正在努力使用正则表达式而不是查询。
    • 更像'^[0-9]+ ([a-zA-Z ]+)'
    • 返回地址的“123 Main”部分。我绝对想要“主要”。
    • 只有第一次出现的文本。我不在乎街道名称中是否包含两个词(即 123 Grand Central Avenue)。
    • 这然后 - '^[0-9]+ (.*) [a-zA-Z ]+$'
    【解决方案2】:

    如果您只想获取 Street_Address_1 并去掉任何前导数字,您可以这样做:

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

    这将获取 street_address_1 中的值并将任何前导数字字符串(加上一个空格)替换为空字符串(第四个参数用于可选的正则表达式标志,例如“g”(全局)和“i”(不区分大小写) ))。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2013-05-10
      • 1970-01-01
      • 2021-01-09
      相关资源
      最近更新 更多