代码之家  ›  专栏  ›  技术社区  ›  Equan Ur Rehman

使用SQL将字符串拆分为多个子字符串集

  •  0
  • Equan Ur Rehman  · 技术社区  · 6 年前

    我有一个列,其中存储了表示食物订单的字符串。字符串如下所示 “102*4;109*3;101*2”。 此处,3位数字表示由“*”和数量分隔的项目代码,而“;”用作项目之间的分隔符。 我想找到一种使用SQL分离项目代码和数量的方法。我以前做过,但在进入数据库之前使用前端编程将其分离

    2 回复  |  直到 6 年前
        1
  •  1
  •   SwapnaSubham Das    6 年前

    如果您使用的是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;
    
        2
  •  0
  •   Kaushik Nayak    6 年前
    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');
    
    推荐文章