[英]oracle split comma delimited string into columns
I have a table like 我有一张桌子
Charge_num mapping_col
--------- -----------
p1.pm.100 1.1.1,1000
p1.pm.110 1.2.1,1000
p1.pm.120 1.3.1,1000
I need to split the "mapping_col" into 2 columns like this: 我需要将“ mapping_col”分成两列,如下所示:
Charge_num wbs obs
--------- --- ---
p1.pm.100 1.1.1 1000
p1.pm.110 1.2.1 1000
p1.pm.120 1.3.1 1000
select charge_num,
substr(mapping_col,1,instr(mapping_col,',',1)-1) AS first_half,
substr(mapping_col, instr(mapping_col,',',1)+1) as last_half
from your_table
Note that the practice of storing numbers as strings is prone to error. 请注意,将数字存储为字符串的做法容易出错。 If you were to cast these results as NUMBER(9) it could break unpredictably if your data is irregular 如果将这些结果转换为NUMBER(9),如果数据不规则,则可能会意外中断
REGEXP_SUBSTR
to the rescue! REGEXP_SUBSTR
来解救!
with sample_data as (select 'p1.pm.100' charge_num, '1.1.1,1000' mapping_col from dual union all
select 'p1.pm.110' charge_num, '1.2.1,1000' mapping_col from dual union all
select 'p1.pm.120' charge_num, '1.3.1,1000' mapping_col from dual)
select charge_num,
regexp_substr(mapping_col, '[^,]+', 1, 1) wbs,
regexp_substr(mapping_col, '[^,]+', 1, 2) obs
from sample_data;
CHARGE_NUM WBS OBS
---------- ------------------------------ ------------------------------
p1.pm.100 1.1.1 1000
p1.pm.110 1.2.1 1000
p1.pm.120 1.3.1 1000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.