我想从包含以下地址的地址字段(Oracle 12 C)中提取单词:-
str1:Abc.. Flat no - 8956, 8th road , Scramendo 4th street,Portland.
str2:Abcd.. Flat no Ad- 3434/89/69 Scramendo 4th street,Portland.
我的查询应该返回
Flat no - 8956.
(来自str1)Flat no Ad- 3434/89/69
(来自str2)基本上我想从庞大的数据行集中的字符串中提取平面编号
答案 0 :(得分:2)
如果您的数据可能类似,则可以使用 regexp_substr()。
根据帖子,我在您想要的输出中发现了一些相似之处,例如:
Flat no
开头digit
/
因此您可以基于它创建正则表达式
Flat no[A-z -]+[0-9/]+
能够匹配特定的子字符串
SELECT
regexp_substr('Abc.. Flat no - 8956, 8th road ,
Scramendo 4th street,Portland','Flat no[A-z -]+[0-9/]+') AS output FROM dual;
SELECT
regexp_substr('Abcd.. Flat no Ad- 3434/89/69 Scramendo 4th street,Portland',
'Flat no[A-z -]+[0-9/]+') AS output FROM dual;
输出:
Flat no - 8956
Flat no Ad- 3434/89/69
答案 1 :(得分:1)
下面的答案可以帮助解决问题-
select
substr(x, instr(x, 'Flat no',1)) from (
select
--regexp_substr('Abcd.. Flat no- 3434/89/69 Scramendo 4th street,Portland.', '[[Flat no- ][0-9]*+'),
--substr(
substr(
'Abcd.. Flat no- 3434/89/69 Scramendo 4th street,Portland.', 1,
REGEXP_INSTR( 'Abcd.. Flat no- 3434/89/69 Scramendo 4th street,Portland.',
'[a-zA-Z]'
,instr('Abcd.. Flat no- 3434/89/69 Scramendo 4th street,Portland.', '-'),1) - 1
) x --, instr('Abcd.. Flat no- 3434/89/69 Scramendo 4th street,Portland.'),1 )
from dual )