Разделить одну колонку на колонну - PullRequest
1 голос
/ 21 октября 2019

У меня есть CurrentCurve Change <1> --> <4> значение в столбце text.

Я хочу разделить text на from и to столбец.

from | to
__________
1    | 4

Я пишу этот запрос

select 
  REGEXP_replace( curve.text,'CurrentCurve Change <|> --> <[0-9]>') as from,
  REGEXP_replace( curve.text,'CurrentCurve Change <[0-9]> --> <|>') as to,
from mytable

Есть лучший способ сделать это.

Ответы [ 2 ]

4 голосов
/ 21 октября 2019

На самом деле REGEXP_SUBSTR, вероятно, было бы более полезным здесь:

SELECT
    REGEXP_SUBSTR(text, '\d+', 1, 1) AS "from",
    REGEXP_SUBSTR(text, '\d+', 1, 2) AS "to"
FROM mytable;

Демо

Примечание: FROM зарезервированоКлючевое слово Oracle / SQL, и вы не должны использовать его для имен таблиц и столбцов. Я также узнал, что TO также является зарезервированным ключевым словом. Мне пришлось поместить оба ваших псевдонима в двойные кавычки, чтобы запустить мою демонстрацию.

0 голосов
/ 21 октября 2019

В вашем случае вам нужно число от < до >.

Вы можете использовать следующее REGEXP_SUBSTR, которое выбирает только число от < до > и игнорирует вседругие цифры (пример 2 с другими цифрами во входной строке):

SQL> -- Example 1
SQL> SELECT
  2      REGEXP_SUBSTR('CurrentCurve Change <1> --> <4>', '<(\d+)>', 1, 1, null, 1 ) AS "from",
  3      REGEXP_SUBSTR('CurrentCurve Change <1> --> <4>', '<(\d+)>', 1, 2, null, 1 ) AS "to"
  4  FROM dual;

from to
---- --
1    4

SQL>
SQL> -- Example 2
SQL> SELECT
  2      REGEXP_SUBSTR('CurrentCurve 2 Change <1> --> <4>', '<(\d+)>', 1, 1, null, 1 ) AS "from",
  3      REGEXP_SUBSTR('CurrentCurve 2 Change <1> --> <4>', '<(\d+)>', 1, 2, null, 1 ) AS "to"
  4  FROM dual;

from to
---- --
1    4

SQL>

db <> fiddle demo

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...