基于Oracle上的换行符chr(13)拆分地址

时间:2014-11-25 19:25:00

标签: sql regex oracle substr

因此,如果我们有以下数据:

"3 Webster Close
Sible Hedingham",
"2 School Road ",
"51 Belfield Avenue
East Calder",
"Clearvu

Manns Hill

",
"179 Delffordd
Rhos
Pontardawe

"

我可以从数据中获取第一行没有问题,并且知道每个新行都以换行符(chr13)开头,但我希望它停在NEXT换行符处,以便列表中的最后一行,如下:

  • 第1行是: - 179 delffordd
  • 第2行是: - Rhose
  • 第3行是: - Pontardawe

我主要关心的只是第1行和第1行。 2(忘记上面例子中的第3行)要拆分但不确定它是怎么可能的?

以下工作,但RhosePontardawe放在第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

1 个答案:

答案 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                                                                         
----------------------------------------------------------------------------------

我希望这就是你要找的东西。