sql - 如何替换第二次出现的点
问题描述
我有软件版本的专栏。我试图从列中的第二次出现中删除点,比如
select REGEXP_REPLACE('12.5.7.8', '.','');
预期为12.578
样本数据在这里
是否可以从第二次出现中删除点
解决方案
一种选择是将其分为两部分:
- 获取第一个数字。
- 将其余数字作为数组获取。
然后将数组转换为没有分隔符的字符串并与第一个组合:
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 版本。
推荐阅读
- reactjs - useState not setting initial state?
- android - Use IntentService with AndroidViewModel
- node.js - Why does my function comprised of asynchronous functions not returning correct value? (NodeJS)
- html - Angular 和 HTML 日期选择器
- android - Firebase 问题:第 4 步:运行您的应用以验证安装
- typescript - 对数组的每个项目的 TypeScript 断言
- django - 如何从导航选项卡收集信息并作为单一表单提交
- networking - 为了使我的本地部署的后端可以从 Internet 访问,需要什么?
- javascript - 为什么权限不适用(静音)?
- r - 如何在 R 中找到 json 的长度