使用 SQL 将字符串分成多组子字符串
Breaking string into sets of substrings using SQL
我有一列存储表示食品订单的字符串。字符串如下
“102*4;109*3;101*2”。
这里的 3 位数字代表项目代码,用 '*' 和数量分隔,而 ';'作为项目之间的分隔符。
我想找到一种使用 SQL 分隔项目代码和数量的方法。之前做过但是在进库之前用前端编程把它分开了
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');
如果您使用的是 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;
我有一列存储表示食品订单的字符串。字符串如下 “102*4;109*3;101*2”。 这里的 3 位数字代表项目代码,用 '*' 和数量分隔,而 ';'作为项目之间的分隔符。 我想找到一种使用 SQL 分隔项目代码和数量的方法。之前做过但是在进库之前用前端编程把它分开了
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');
如果您使用的是 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;