我的表中有一个名为NARRATION的列,其值如下所示。
NARRATION
-------------------------------------
BI DS NO 6005527182
BI DS NO. 485019
CI DS NO.6008364862(2000*1)
CI DS NO.1905180207 10*1) EDDF34592845
CI DS NO.2105180520-(50*1) DDFF39844240
CI DS NO.2105180653 (2000*1) DFSD39844240
CI DS NO.1905180220/(500*3,20
CI DS NO.2105180166*(200*1) DSFSF39844240
我想在文字 DS NO。之后得到第一个单词,直到下一个空格或任何其他特殊字符,如下所示。 有些时候,在 DS NO。之后也可能存在空间,并且从空格词开始我需要推导出来。
NARRATION |DERIVE_NARRATION
------------------------------------------|----------------
BI DS NO 6005527182 |6005527182
BI DS NO. 485019 |485019
CI DS NO.6008364862(2000*1) |6008364862
CI DS NO.1905180207 10*1) EDDF34592845 |1905180207
CI DS NO.2105180520-(50*1) DDFF39844240 |2105180520
CI DS NO.2105180653 (2000*1) DFSD39844240 |2105180653
CI DS NO. 1905180220/(500*3,20 |1905180220
CI DS NO.2105180166*(200*1) DSFSF39844240 |2105180166
请帮我查询。
答案 0 :(得分:3)
您可以使用regexp_substr
获取所需内容。
假设你的特殊字符"都在您的样本数据中列出,这应该做的工作
select narration,
regexp_substr(narration, 'DS NO([ \.]*)([^- \\/\*(]*)', 1, 1, 'i', 2)
from tab
NARRATION DERIVE_NARRATION
----------------------------------------- ----------------------------
BI DS NO 6005527182 6005527182
BI DS NO. 485019 485019
CI DS NO.6008364862(2000*1) 6008364862
CI DS NO.1905180207 10*1) EDDF34592845 1905180207
CI DS NO.2105180520-(50*1) DDFF39844240 2105180520
CI DS NO.2105180653 (2000*1) DFSD39844240 2105180653
CI DS NO. 1905180220/(500*3,20 1905180220
CI DS NO.2105180166*(200*1) DSFSF39844240 2105180166
工作原理:它查找字符串" DS NO"然后是空格或圆点,然后获取以下字符,继续前进,直到找到[^- \\/\*(]
中列出的"特殊字符"。
参数2用于获取第二个匹配表达式。
使用该样本数据,您似乎需要获得一个数字,更多的是所有内容直到#34;特殊字符&#34 ;;如果是这样,您可以将其编辑为:
regexp_substr(narration, 'DS NO([ \.]*)([0-9]*)', 1, 1, 'i', 2)