在 Oracle 中使用 REGEXP_SUBSTR 作为拆分

Posted

技术标签:

【中文标题】在 Oracle 中使用 REGEXP_SUBSTR 作为拆分【英文标题】:Using REGEXP_SUBSTR as split in Oracle 【发布时间】:2013-06-04 16:20:56 【问题描述】:

我有A.FIELD,它输出以下格式:

9:30AM - 12:50PM AbCdEfGhIj XY-000

我正在尝试找出一种方法来根据指定的分隔符获取每个单独的值。

    第一个 : 之前的所有整数(例如:9) 第一个 - 或第二个空格之后和第二个 : 之前的所有整数(例如:12) 第三个空格前的所有字符(例如:9:30AM - 12:50PM) 最后一个空格之前和倒数第二个空格之后的所有字符(例如:AbCdEfGhIj

现在我可以得到以下内容:

REGEXP_SUBSTR(A.FIELD, '\S*$')                        -- XY-000
REGEXP_SUBSTR(A.UP_CLASS_MEETINGS, '[^ ]+', 1)        -- 9:30AM

我的第二个例子是获得9:30AM 的最佳方法吗?有缺陷吗?

我怎样才能最好地利用SUBSTRINSTR和/或REGEXP_SUBSTR

【问题讨论】:

【参考方案1】:
regexp_substr(a.field, '(\d+):', 1, 1, '', 1),
regexp_substr(a.field, '(\d+):', 1, 2, '', 1),
regexp_substr(a.field, '\S+(\s|-)+\S+'),
regexp_substr(a.field, '\S+(\s|-)+\S+\s+(.*)\s+\S+$', 1, 1, '', 2)

fiddle

【讨论】:

谢谢,除了最后一行外,效果很好。我已经编辑了我的帖子。 我应用第四个:SELECT REGEXP_SUBSTR ('Tag: XXXX (TEM4B19318D) Type: TRIP ONLY Removed from: POINT S_BAY CAPBNK 7F94 SW', '\sCAPBNK\s(\w+)\s' , 1, 1, '', 1) 来自对偶;结果 7F94 就像魅力一样。然而,我不知道它为什么起作用。请有人给我解释一下。

以上是关于在 Oracle 中使用 REGEXP_SUBSTR 作为拆分的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中,事务中使用下列SQL语句不会引起锁定?

oracle中的存储过程,有啥作用,以及怎么在代码中使用?

在oracle中使用merge into实现更新和插入数据

Oracle中如何在储过程中使用临时表

如何在oracle中使用存储过程创建表,如果存在就先删除

在oracle中如何结合使用('')和like