我有很多格式相同的txt卡。 我需要解析它以从中获取一些值。 我不明白如何在Oracle中使用regexp substr。请帮助我编写sql语句,它返回值,我在** - 符号之间标记(例如:第一个字符串,02/02/11,AA11223344等):
From: "abc def (**first string**)" <email@site.com>
02/01/2011 09:27 First Date : **02/02/11**
Player : BILL BROWN ID : **AA11223344**
At : YELLOW STREET. CD Number : **A11223FER**
Code :
BUYS : **123M** (M) of AAA 0 02/02/11 Owner : **England**
Shiped : **02/04/11**
Number : **11.223344** Digi : **1.2370000**
Ddate: **02/04/11**
Notes : **First line here**
* Size : **USD 11,222,333.44**
* Own ( **0 days** ): **0.00**
* Total : USD **222,333,444.55**
答案 0 :(得分:0)
您可以使用hierarchical queries递归地应用正则表达式评估;在每个级别,您将查找字符串中出现的级别。
请注意&#34;非贪心&#34;模式字符串中的operator(??),解释了here,以及正则表达式函数。
with test as (
select 'From: "abc def (**first string**)" <email@site.com>
02/01/2011 09:27 First Date : **02/02/11**
Player : BILL BROWN ID : **AA11223344**
At : YELLOW STREET. CD Number : **A11223FER**
Code :
BUYS : **123M** (M) of AAA 0 02/02/11 Owner : **England**
Shiped : **02/04/11**
Number : **11.223344** Digi : **1.2370000**
Ddate: **02/04/11**
Notes : **First line here**
* Size : **USD 11,222,333.44**
* Own ( **0 days** ): **0.00**
* Total : USD **222,333,444.55** ' as txt
from dual
)
select TRIM('*' FROM regexp_substr(txt, '\*\*(.*??)\*\*', 1, LEVEL, 'n') )
from test
CONNECT BY regexp_subSTR(txt, '\*\*(.*??)\*\*', 1, LEVEL, 'n') is not null