在 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
的最佳方法吗?有缺陷吗?
我怎样才能最好地利用SUBSTR
、INSTR
和/或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 作为拆分的主要内容,如果未能解决你的问题,请参考以下文章