sql - 如何按大写字母拆分值
问题描述
我有一张这样的桌子
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
解决方案
好吧,列名不能是查询的参数,因此您必须以某种方式将它们集成到查询中。
这是一种可能性 - 在第一步中,您使用 获取参数的位置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
如果参数的顺序可能发生变化,您将不得不扩展逻辑。