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 标准化地址

Oracle REGEXP_REPLACE - 用子字符串替换多次出现的模式

关于 Regexp_replace - Oracle SQL