Oracle SQL: извлечение значения после текста и перед разделителем (или другим символом) - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужна помощь по следующему вопросу. Мне было трудно понять, как это сделать.

Так что, в принципе, я хотел бы получить числовое значение после текста '; a_limit:' и '; limit:', но только вверх на точку с запятой сразу после.

Вот так выглядят данные:

+------------+--------------------------------------------+
| product id |                 properties                 |
+------------+--------------------------------------------+
|          1 | ;a_limit:99;ccc:1234;limit:1:mmm:xx        |
|          2 | ;a_limit:99;bbb:456;ccc:234;limit:15;nnn:0 |
|          5 | ;a_limit:99;limit:5;mmm:null               |
+------------+--------------------------------------------+

Вот как я хочу, чтобы они выглядели так:

+------------+---------+-------+
| product id | a_limit | limit |
+------------+---------+-------+
|          1 |      99 |     1 |
|          2 |     100 |    15 |
|          5 |      99 |     5 |
+------------+---------+-------+

1 Ответ

1 голос
/ 17 апреля 2020

Вы не должны хранить значения в одной строке, если вас интересуют отдельные значения. В любом случае:

select
  product_id,
  to_number(regexp_replace(properties, '^.*;a_limit:([[:digit:]]+).*$', '\1')) as a_limit,
  to_number(regexp_replace(properties, '^.*;limit:([[:digit:]]+).*$', '\1')) as limit
from mytable
order by product_id;

Выражения REGEXP_REPLACE удаляют из строки все, кроме чисел.

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