因此,如果我们有以下数据:
"3 Webster Close
Sible Hedingham",
"2 School Road ",
"51 Belfield Avenue
East Calder",
"Clearvu
Manns Hill
",
"179 Delffordd
Rhos
Pontardawe
"
我可以从数据中获取第一行没有问题,并且知道每个新行都以换行符(chr13)开头,但我希望它停在NEXT换行符处,以便列表中的最后一行,如下:
我主要关心的只是第1行和第1行。 2(忘记上面例子中的第3行)要拆分但不确定它是怎么可能的?
以下工作,但Rhose
和Pontardawe
放在第2行。我不确定是否可以应用与REGEXP相同的逻辑来使用(。*)x 2?
SELECT
REGEXP_SUBSTR (trim(street), '(.*)$',1,1,'m') as addresslineone,
case
when instr(street,chr(10)) > 0
then replace(substr(replace(trim(street),chr(13),''), instr(replace(trim(street),chr(13),''),chr(10))+1, length(replace(trim(street),chr(13),''))-instr(replace(trim(street),chr(13),''),chr(10))+1),chr(10),'')
end as addresslinetwo
产地: Addresslineone Addresslinetwo
179 Delfford Rhose Pontardawe
答案 0 :(得分:1)
您可以regexp_replace
使用regexp_substr
,如下所示:
select
REGEXP_SUBSTR (regexp_replace(trim(street),'"',''),'(.*)'||chr(10)||'*',1,1,'i',1) first,
REGEXP_SUBSTR (regexp_replace(trim(street),'"',''),'(.*)'||chr(10)||'*',1,2,'i',1) second,
REGEXP_SUBSTR (regexp_replace(trim(street),'"',''),'(.*)'||chr(10)||'*',1,3,'i',1) third
from (select
'"179 Delffordd
Rhos
Pontardawe
"' street from dual union all select '"3 Webster Close Sible Hedingha"' from dual)
首先使用""
删除regexp_replace
个字符,然后使用regexp_substr
获取第一,第二和第三个值。
这将返回:
FIRST SECOND THIRD
----------------------------------------------------------------------------------
179 Delffordd Rhos Pontardawe
-----------------------------------------------------------------------------------
3 Webster Close Sible Hedingha
----------------------------------------------------------------------------------
我希望这就是你要找的东西。