【问题标题】:Postgres regexp_replace, remove "st", "nd", "rd"Postgres regexp_replace,删除“st”、“nd”、“rd”
【发布时间】:2016-06-19 23:44:44
【问题描述】:

我需要删除上面的后缀,只保留一个数字和其他文本。

字符串举例:

Start from 1st, 2nd, 3rd

应该是

Start from 1, 2, 3

【问题讨论】:

    标签: postgresql regexp-replace


    【解决方案1】:

    对三个可能的值使用或条件:

    select regexp_replace(the_column, '(st)|(nd)|(rd)', '', 'g') as new_value
    from the_table;
    

    您可能还希望通过使用标志'gi' 而不仅仅是'g',来使用in区分大小写的替换。

    如果这些字符串可以自己出现(即不跟随数字),您需要扩展正则表达式:

    regexp_replace(the_column, '([0-9])((st)|(nd)|(rd))', '\1', 'g')
    

    SQLFiddle 示例:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/6533

    【讨论】:

    • 不适合,因为它会删除所有不属于数字的字符 'st'、'nd' 等
    • @user3627553:你看到我的第二个正则表达式了吗?顺便说一句:您应该在最初的问题中包含类似的内容,一旦您得到答案,就不要提供其他信息
    • 太棒了!非常感谢!第二个完全是我需要的
    【解决方案2】:

    文档说:

    regexp_replace(source, pattern, replacement [, flags ])

    所以对于你的情况,这应该可以解决问题:

    regexp_replace(YOUR_SOURCE, '(\d*+(\w{2}))', '', 'g')

    【讨论】:

    【解决方案3】:

    也匹配第 5th 和 11th

    regexp_replace(the_column, '([\d+])(\w{2})', '\1', 'g')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多