oracle 使用 REGEXP_REPLACE 函数替换子字符
Posted
技术标签:
【中文标题】oracle 使用 REGEXP_REPLACE 函数替换子字符【英文标题】:oracle replace subcharacter using REGEXP_REPLACE function 【发布时间】:2015-03-12 17:11:32 【问题描述】:我在名为 TEST 的表中有以下列值,并希望像这样替换这些值:
XX01 -> XX1
XX02 -> XX2
XX03 -> XX3
XX04 -> XX4
XX01/ABC -> XX1/ABC
这实际上是什么意思,我想通过将 0 替换为空字符串来删除它。
我已经像这样使用过oracle REPLACE函数(其他情况):
REPLACE(column_name,'0', '')
但对于这种情况,这将不起作用,因为我有其他值,包含 0,但不能更改。
如何在 oracle 中使用 reg 表达式以适当的方式替换零?
希望您明白我的意思,并对格式错误表示歉意。
干杯
【问题讨论】:
也发布其他值,因为 regexp_replace 需要模式。 只和精确这些值(XX01、XX02、XX03、XX04 和 XX01/ABC),其余值不得更改。 其他取值随意,但不要以XX开头。 至少发一行会更好。 A02 或 A48/11 例如,只有一个或两个字符后跟一个或两个数字。 【参考方案1】:使用
regexp_replace(yourValue,'(XX)0([0-4])(*)', '\1\2\3')
它将适用于您指定的所有情况...它只会替换 0 如果它后面跟着另一个数字,就像您所拥有的情况一样。如果 0 后面没有数字,则不会被替换。
不确定它是否正是您想要的,因为您没有告诉我们“不允许的其他 0 值”是什么样的......
【讨论】:
我也可以只使用 '(XX)0(0-4)+(*)', '') 吗?字符 muss 以 XX 开头。 你能解释一下你为什么使用'\1\2\3'吗? @curious 是打印分组语句(1-2-3)以上是关于oracle 使用 REGEXP_REPLACE 函数替换子字符的主要内容,如果未能解决你的问题,请参考以下文章
oracle 使用 REGEXP_REPLACE 函数替换子字符
使用 oracle regexp_replace 替换代码的某些部分
Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]
在 oracle sql 中使用 regexp_replace 标准化地址