0

我有一列存储代表食品订单的字符串。字符串为“102*4;109*3;101*2”。这里 3 位数字代表以“*”分隔的项目代码和数量,而“;” 充当项目之间的分隔符。我想找到一种使用 SQL 将项目代码和数量分开的方法。我之前做过但是在进入数据库之前使用前端编程将它分开

4

2 回答 2

1

如果您使用的是 Oracle 12C,那么您可以使用正则表达式来实现您的结果。例如:-

    创建表 food_order (order_no number, food_order varchar2(500));

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

    从 food_order 中选择 *;

输出:-

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

现在尝试以下查询:-

    选择订单号,
     regexp_substr(food_order,'[^*]+', 1,1) AS"ORDER_ID",
     regexp_substr(food_order,'[^*]+', 1,2) AS"QUANTITY"
      从
      (SELECT DISTINCT order_no,
        regexp_substr(food_order,'[^;]+', 1, level) AS"FOOD_ORDER"
      FROM food_order
     连接方式 regexp_substr(food_order, '[^;]+', 1, level) 不为空
    ) order_no 的临时订单;
于 2018-05-06T14:27:45.357 回答
0
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');
于 2018-05-06T13:22:49.957 回答