使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点
Posted
技术标签:
【中文标题】使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点【英文标题】:Remove all dots from a String except first, with Oracle REGEXP_REPLACE 【发布时间】:2012-06-12 17:45:59 【问题描述】:我想使用 Oracle REGEXP_REPLACE 从字符串中删除一些点。 如果存在,我必须从第二个点中删除。 例如:
4 => 4
5 => 5
5.1 => 5.1
5.1.1 => 5.11
5.1.2 => 5.12
5.1.2.1 => 5.121
5.1.2.2 => 5.122
6 => 6
我有这个
select REGEXP_REPLACE(num, '(\d+)(\.)(\d+)(\.)(\d+)', '\1.\3\5')
from my_table;
问题是我的查询只针对两个点。如果字符串有两个以上的点,我必须修改查询以接受更多的点等等。 有没有办法自动做到这一点?
谢谢
【问题讨论】:
【参考方案1】:一个可能的“肮脏”解决方案
select REGEXP_REPLACE(num, '(\d+)(\.)(.*)', '\1\2') ||
REPLACE( REGEXP_REPLACE(num, '(\d+)(.*)', '\2') ,'.','')
from my_table;
虽然不是很清楚,但它确实有效。
【讨论】:
【参考方案2】:SELECT SUBSTR(mystr, 1, INSTR(mystr,'.'))
|| REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.')
FROM my_table;
【讨论】:
以上是关于使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点的主要内容,如果未能解决你的问题,请参考以下文章
oracle 使用 REGEXP_REPLACE 函数替换子字符
使用 oracle regexp_replace 替换代码的某些部分
Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]
在 oracle sql 中使用 regexp_replace 标准化地址