【问题标题】:Retrieve Second to Last Word in PostgreSQL在 PostgreSQL 中检索倒数第二个单词
【发布时间】:2017-07-31 15:53:21
【问题描述】:

我使用的是 PostgreSQL 9.5.1

我有一个地址字段,我试图在其中提取街道类型(AVERDST 等)。其中一些格式如下:5th AVE NPEE DEE RD N

我在 PostgreSQL 中看到了一些方法来根据空格从左侧计算段数,即 split_part(name, ' ', 3),但我似乎找不到任何内置函数或正则表达式示例,我可以从中计算字符对。

我的前进思路是这样的:

select case when regexp_replace(name, '^.* ', '') = 'N'
            then *grab the second to last group of string values*
       end as type;

【问题讨论】:

  • 这保证在教室外的任何地方都失败。邮政地址不如女性的衣服尺码统一。您应该使用地址验证服务返回您有兴趣分离的组件中的地址,而不是试图让数据库自己完成。
  • 考虑您的一些客户也可能居住在其他国家/地区。
  • 这个数据集中只有大约26k条记录,所以我很有信心如果我能做到这一点,那么它就会解决问题。
  • 这只是一个国家的一个县。
  • @BaconBits 你会推荐什么地址验证服务?

标签: sql regex database string postgresql


【解决方案1】:

撇开这种方法在应用于地址数据时的稳健性问题不谈,您可以像这样在字符串中提取倒数第​​二个以空格分隔的子字符串:

with a as (
    select string_to_array('5th AVE N', ' ') as addr
    )
select
    addr[array_length(addr, 1)-1] as street
from
    a;

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多