Разбиение строки на наборы подстрок с использованием SQL - PullRequest
0 голосов
/ 06 мая 2018

У меня есть столбец, в котором хранится строка, представляющая заказ на еду. Строка идет как "102 * 4; 109 * 3; 101 * 2". Здесь 3 цифры представляют код товара, разделенный '*' с количеством while ';' действует как разделитель среди элементов. Я хочу найти способ разделить код товара и количество с помощью SQL. Я делал это раньше, но использовал внешнее программирование, чтобы отделить его перед входом в базу данных

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Если вы используете Oracle 12C, вы можете использовать регулярное выражение для достижения вашего результата. например: -

    create table food_order (order_no number, food_order varchar2(500));

    insert into food_order values (1001,'102*4;109*3;101*2');
    insert into food_order values (1002,'103*3;108*5;101*3');
    insert into food_order values (1003,'106*4;107*3;109*2');
    insert into food_order values (1004,'106*4;105*3;101*7');

    select * from food_order;

Output:-

ORDER_NO    FOOD_ORDER
1001    102*4;109*3;101*2
1002    103*3;108*5;101*3
1003    106*4;107*3;109*2
1004    106*4;105*3;101*7

Теперь попробуйте следующий запрос: -

    SELECT order_no,
     regexp_substr(food_order,'[^*]+', 1,1) AS"ORDER_ID",
     regexp_substr(food_order,'[^*]+', 1,2) AS"QUANTITY"
      FROM
      (SELECT DISTINCT order_no,
        regexp_substr(food_order,'[^;]+', 1, level) AS"FOOD_ORDER"
      FROM food_order
     CONNECT BY regexp_substr(food_order, '[^;]+', 1, level) IS NOT NULL
    ) temp order by order_no;
0 голосов
/ 06 мая 2018
Select column name from table_name where regexp_replace(column_name,[^{A-Z})])
  Union all
Select column name from tablename where 
Regexp_replace(values,'/d');
...