【问题标题】:get till end of string after first space在第一个空格之后直到字符串结尾
【发布时间】:2017-07-18 11:15:17
【问题描述】:

当我尝试使用 split_part 时,我需要按如下方式拆分字符串

select split_part('8 HAMPSHIRE RD',' ',2)    

预期输出:HAMPSHIRE RD

【问题讨论】:

    标签: postgresql postgresql-9.4


    【解决方案1】:

    没有正则表达式的更便宜的解决方案:

    SELECT substring (
              '8 HAMPSHIRE RD'
              FROM position(' ' IN '8 HAMPSHIRE RD') + 1
           );
    

    【讨论】:

      【解决方案2】:

      使用regexp_replace():

      select regexp_replace('8 HAMPSHIRE RD', '.*?\s', '');
      
       regexp_replace 
      ----------------
       HAMPSHIRE RD
      (1 row)
      

      使用字符串操作函数的替代解决方案:

      with my_table(str) as (
          values ('8 HAMPSHIRE RD')
      )
      select right(str, -strpos(str, ' '))
      from my_table;
      

      如果您想跳过仅包含数字的第一个单词,您应该使用\d(数字)而不是.(任何字符):

      select regexp_replace('8 HAMPSHIRE RD', '\d*?\s', '');
      

      【讨论】:

      • 谢谢,但你能解释一下 '.*?\s' 是什么意思吗? \s 是否表示空格和 .表示从位置 1 和 *?表示直到字符串的结尾
      • 表达式的意思是任何字符串直到第一个空格,包括这个空格? 符号强制正则表达式变得懒惰(即查找第一个空格)。
      • 我将此问题标记为已回答,但是对于仅检查数字后的空格是否有帮助?因为当我将上面的表达式应用于像“PO BOX 203”这样的地址时,上面的表达式给了我“BOX 203”,我期望结果为“PO BOX 203”。抱歉,我之前应该在我的问题中包含这个示例
      猜你喜欢
      • 2014-01-04
      • 2019-09-04
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2013-04-07
      • 2021-09-26
      相关资源
      最近更新 更多