Парсинг канала разграничил строку в столбцы?

У меня есть столбец с разделенными значениями канала, такими как:

'23|12.1 | 450|30|9|78|82.5|92.1|120|185|52|11'

Я хочу проанализировать этот столбец для заполнения таблицы 12 соответствующими столбцами: month1, month2, month3... month12.

Таким образом, month1 будет иметь значение 23, month2 значение 12.1 и т.д...

Существует ли способ проанализировать его циклом или разделителем вместо того, чтобы иметь необходимость разделить одно значение во время с помощью substr?

Спасибо.

5
задан APC 31 May 2010 в 11:11
поделиться

2 ответа

Вы можете использовать regexp_substr (10g+):

SQL> SELECT regexp_substr('23|12.1| 450|30|9|', '[^|]+', 1, 1) c1,
  2         regexp_substr('23|12.1| 450|30|9|', '[^|]+', 1, 2) c2,
  3         regexp_substr('23|12.1| 450|30|9|', '[^|]+', 1, 3) c3
  4    FROM dual;

C1 C2   C3
-- ---- ----
23 12.1  450

С циклом в PL/SQL:

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2     p_tsv  VARCHAR2(1000) := '23|12.1| 450|30|9|78|82.5|92.1|120|185|52|11';
  3     l_item VARCHAR2(100);
  4  BEGIN
  5     FOR i IN 1 .. length(p_tsv) - length(REPLACE(p_tsv, '|', '')) + 1 LOOP
  6        l_item := regexp_substr(p_tsv, '[^|]+', 1, i);
  7        dbms_output.put_line(l_item);
  8     END LOOP;
  9  END;
 10  /

23
12.1
450
30
9
78
82.5
92.1
120
185
52
11

PL/SQL procedure successfully completed

Update

У вас всего 12 столбцов, я бы написал запрос напрямую без цикла, он будет более производительным и простым в обслуживании, чем динамический SQL (не говоря уже о том, что его бесконечно проще написать):

INSERT INTO your_table
   (ID, month1, month2, month3...)
   SELECT :p_id, 
          regexp_substr(:p_tsv, '[^|]+', 1, 1) c1, 
          regexp_substr(:p_tsv, '[^|]+', 1, 2) c2,
          regexp_substr(:p_tsv, '[^|]+', 1, 3) c3
          ...
     FROM dual;
9
ответ дан 14 December 2019 в 01:02
поделиться

Я не думаю, что есть что-то уже определенное.

Есть несколько реализаций на orafaq и я нашел это также.

0
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: