首页 > 解决方案 > 如何替换第二次出现的点

问题描述

我有软件版本的专栏。我试图从列中的第二次出现中删除点,比如

select REGEXP_REPLACE('12.5.7.8', '.','');

预期为12.578

样本数据在这里

是否可以从第二次出现中删除点

标签: sqlpostgresqlreplaceregexp-replace

解决方案


一种选择是将其分为两部分:

  • 获取第一个数字。
  • 将其余数字作为数组获取。

然后将数组转换为没有分隔符的字符串并与第一个组合:

select (split_part('12.5.7.8', '.', 1) || '.' || 
        array_to_string((REGEXP_SPLIT_TO_ARRAY('12.5.7.8', '[.]'))[2:], '')
       )

另一种选择是用其他东西替换第一个'.',然后去掉'.'s 并用 a 替换其他东西'|'

select translate(regexp_replace(version, '^([^.]+)[.](.*)$', '\1|\2'), '|.', '.')
from software_version;

是三个版本的 db<>fiddle,包括评论中提到的 a_horse_with_no_name 版本。


推荐阅读