Как создать представление, разделяющее один столбец на два или более с помощью регулярного выражения? - PullRequest
0 голосов
/ 13 августа 2010

У нас есть ненормализованная таблица, содержащая информацию внешнего ключа в виде свободного текста внутри столбца.

Я хотел бы создать представление, которое преобразует и нормализует эту таблицу.

например. столбец, который содержит следующий текст:

"REFID:12345, REFID2:67890"

Я хочу создать представление, в котором REFID1 и REFID2 будут иметь 2 отдельных целочисленных столбца.

Возможно ли это в Oracle? Каковы подходы, и какие из них наиболее эффективны?

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

Oracle10g + поддерживает регулярные выражения; Вы можете использовать REGEXP_SUBSTR :

SELECT REGEXP_SUBSTR(text, '[:digit:]{5}', 1, 1) AS first_refid,
       REGEXP_SUBSTR(text, '[:digit:]{5}', 1, 2) AS second_refid
  FROM TABLE
1 голос
/ 13 августа 2010

Если порядок тегов REFID / REFID2 может измениться, вы можете использовать это:

WITH d AS (
   SELECT 'REFID:12345, REFID2:67890' id_list FROM DUAL
   UNION ALL
   SELECT 'REFID2:111, REFID:222' FROM DUAL
)
SELECT id_list
      ,CASE WHEN INSTR(refid,',') > 0
            THEN SUBSTR(refid, 1, INSTR(refid,',')-1)
            ELSE refid
       END AS refid
      ,CASE WHEN INSTR(refid2,',') > 0
            THEN SUBSTR(refid2, 1, INSTR(refid2,',')-1)
            ELSE refid2
       END AS refid2
FROM (
   SELECT id_list
         ,SUBSTR(id_list
                ,INSTR(id_list,'REFID:')+6
                ) AS refid
         ,SUBSTR(id_list
                ,INSTR(id_list,'REFID2:')+7
                ) AS refid2
   FROM d
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...