如何替换第二次出现的点
how to replace dots from 2nd occurrence
我有软件版本专栏。我试图从列中的第 2 次出现中删除点,例如
select REGEXP_REPLACE('12.5.7.8', '.','');
预期输出是 12.578
样本数据为here
是否可以删除第二次出现的点
一个选择是将其分成两部分:
- 获取第一个数字。
- 将其余数字作为数组获取。
然后将数组转换为无分隔符的字符串,并与第一个合并:
select (split_part('12.5.7.8', '.', 1) || '.' ||
array_to_string((REGEXP_SPLIT_TO_ARRAY('12.5.7.8', '[.]'))[2:], '')
)
另一种选择是将第一个 '.'
替换为其他内容,然后删除 '.'
并将其他内容替换为 '|'
:
select translate(regexp_replace(version, '^([^.]+)[.](.*)$', '|'), '|.', '.')
from software_version;
Here 是一个 db<>fiddle 三个版本,包括评论中提到的 a_horse_with_no_name 版本。
我只走左边和右边:
concat(
left(str, position('.' in str)),
replace(right(str, -position('.' in str)), '.', '')
)
对于 12.34.56.78
的 str
,left
给出 12.
并且使用负数位置的权利给出 34.56.78
然后替换删除点
我有软件版本专栏。我试图从列中的第 2 次出现中删除点,例如
select REGEXP_REPLACE('12.5.7.8', '.','');
预期输出是 12.578
样本数据为here
是否可以删除第二次出现的点
一个选择是将其分成两部分:
- 获取第一个数字。
- 将其余数字作为数组获取。
然后将数组转换为无分隔符的字符串,并与第一个合并:
select (split_part('12.5.7.8', '.', 1) || '.' ||
array_to_string((REGEXP_SPLIT_TO_ARRAY('12.5.7.8', '[.]'))[2:], '')
)
另一种选择是将第一个 '.'
替换为其他内容,然后删除 '.'
并将其他内容替换为 '|'
:
select translate(regexp_replace(version, '^([^.]+)[.](.*)$', '|'), '|.', '.')
from software_version;
Here 是一个 db<>fiddle 三个版本,包括评论中提到的 a_horse_with_no_name 版本。
我只走左边和右边:
concat(
left(str, position('.' in str)),
replace(right(str, -position('.' in str)), '.', '')
)
对于 12.34.56.78
的 str
,left
给出 12.
并且使用负数位置的权利给出 34.56.78
然后替换删除点