Oracle: разделить текстовое поле на новую строку - PullRequest
1 голос
/ 19 апреля 2011

Мне нужно объединить пару таблиц, одна из которых имеет одно поле адреса, а вторая - как 3 поля строки адреса.

Одно поле адреса в 1-й таблице содержит разрывы строк.*

Как я могу разделить это поле на 3?

Обновление:

Оказывается, некоторые записи имели CHR (10) ||CHR (13), другие CHR (13) ||CHR (10), а другие просто CHAR (13).Независимо от того, принятое решение ниже работает.Полезный способ узнать это

select dump(field) from table;

1 Ответ

4 голосов
/ 19 апреля 2011

Предполагая, что ваш символ перевода строки - CHR (10), должно работать что-то вроде следующего:

SELECT TRIM(REGEXP_REPLACE(addr, '(.*)' || CHR(10) || '.*' || CHR(10) || '.*', '\1')) AS STREET_ADDR,
       TRIM(REGEXP_REPLACE(addr, '.*' || CHR(10) || '(.*)' || CHR(10) || '.*', '\1')) AS CITY,
       TRIM(REGEXP_REPLACE(addr, '.*' || CHR(10) || '.*' || CHR(10) || '(.*)', '\1')) AS STATE
      FROM addr_table; 

Если addr_table заполняется с использованием следующего оператора:

INSERT INTO addr_table(addr)
VALUES('12345 MY STREET' || CHR(10) || 'NOWHERESVILLE' || CHR(10) || 'ASTATE');

вышеупомянутый SELECT вернет

STREET_ADDR     CITY            STATE
12345 MY STREET NOWHERESVILLE   ASTATE

Делись и наслаждайся

...