Sql 删除字符串中的子字符串(oracle 11g)

Posted

技术标签:

【中文标题】Sql 删除字符串中的子字符串(oracle 11g)【英文标题】:Sql to remove a substring within a string (oracle 11g) 【发布时间】:2019-02-06 05:28:10 【问题描述】:

我在下面有一个示例字符串。

"MHV9DRDUY7 Confirmed.on 31/8/18 at 10:18 AMKsh9,500.00 received from 25470000000 JAMES BOND.New Account balance is Ksh12,050,100"

我想使用 SQL 从主字符串中删除子字符串 "New Account balance is Ksh12,050,100"

请注意,子字符串 (Ksh12,050,100) 中的数量不是固定的,因此我在使用 REGEXP_REPLACE 时遇到了挑战。

【问题讨论】:

您在使用REGEXP_REPLACE() 时遇到什么问题?任何正则表达式教程都会解释如何匹配不固定的字符序列。 要删除的部分总是在字符串的末尾吗? 您是否尝试过使用 replace(field, 'New Account balance is ([A-Za-z0-9,]*)','')? @Aleksej 是的,它总是在字符串的末尾。 @Gowdhaman008 已使用。 REGEXP_REPLACE (field,'新账户余额为 (Ksh[0-9]+(,[0-9]+)(.[0-9]+)*)','') 感谢您的提醒。工作过 【参考方案1】:

假设要删除的子字符串总是在字符串的最后部分,并且子字符串'New Account balance is Ksh'在字符串中最多出现一次,则不需要正则表达式。

您可以找到要删除的字符串开始的位置(INSTR),然后将字符串修剪到该位置(SUBSTR):

select substr(yourString, 1, instr(yourString, 'New Account balance is Ksh') -1)
from ...

【讨论】:

以上是关于Sql 删除字符串中的子字符串(oracle 11g)的主要内容,如果未能解决你的问题,请参考以下文章

如何计算oracle中从一个字符到另一个字符的子字符串的长度

SQL String - 删除2次出现之间的子字符串

SQL Regex - 用另一个字段的子字符串替换

Oracle删除字段中的空格、回车及指定字符的实例代码

在 C++ 中删除韩语字符串中的子字符串

oracle sql语言模糊查询