首页 > 解决方案 > 如何按大写字母拆分值

问题描述

我有一张这样的桌子

JobNo |  Properties
--------------------------------------------------------------------------------------------
1     |  Active=nDaysOfWork=mon,tue,wed,thu,fri,sat,sunStartTime=08:00EndTime=09:00
2     |  Active=nDaysOfWork=sat,sunStartTime=12:00EndTime=13:00

我想拆分属性值

注意:header(Active, DaysOfWork, StartTime, EndTime) 可以作为参数

这就是我想要的

JobNo   |  Active   |   DaysOfWork                     |   StartTime       |     EndTime
----------------------------------------------------------------------------------------
1       |     n     |   mon,tue,wed,thu,fri,sat,sun    |    08:00          |      09:00
2       |     y     |   sat,sun                        |    12:00          |      13:00

标签: sqloracle

解决方案


好吧,列名不能是查询的参数,因此您必须以某种方式将它们集成到查询中。

这是一种可能性 - 在第一步中,您使用 获取参数的位置instr,在下一步中,您通过考虑参数名称长度来刮取值。

with prop as (
select 
jobNo,
Properties,
instr(Properties,'Active=') col1,
instr(Properties,'DaysOfWork=') col2,
instr(Properties,'StartTime=') col3,
instr(Properties,'EndTime=')  col4 
from my_tab)
select jobNo,
substr(Properties, col1+7, col2 - col1 -7) as Active,
substr(Properties, col2+11, col3 -col2 -11) as DaysOfWork,
substr(Properties, col3+10, col4 - col3 -10 ) as StartTime,
substr(Properties, col4+8) as EndTime
from prop;

JOBNO, ACTIVE, DAYSOFWORK,                  STARTTIME, ENDTIME
1      n       mon,tue,wed,thu,fri,sat,sun  08:00      09:00
2      n       sat,sun                      12:00      13:00

如果参数的顺序可能发生变化,您将不得不扩展逻辑。


推荐阅读