select?*
from?(select?trim(regexp_substr(A,?'[^,]+',?1,?IDX))?ftype
from?tablename?a,?(select?level?IDX?from?dual?connect?by?level?1000)?b
where?c.ftype?is?not?null
上面的SQL比较麻烦,但一条SQL可以出来,你可以试一下
另外,你可以写一下函数进行拆分,把相关的逻辑放到函数体里面,看起来比较简洁
希望可以帮到你
加个序号,然后自连接就行了,例子:(自己造的数据,表、字段自己替换)
--数据模拟
WITH?TMP?AS
(SELECT?CASE
'Logged?In'
ELSE
'Logged?Out'
FROM?DUAL
CONNECT?BY?LEVEL?=?10
UNION?ALL
SELECT?CASE
CONNECT?BY?LEVEL?=?10),
--添加一个序号?
TMP1?AS
(SELECT?T.*,?ROW_NUMBER()?OVER(PARTITION?BY?ID,?TYPE?ORDER?BY?TIME)?RN
FROM?TMP?T)
--自连接
SELECT?A.TYPE,?A.TIME,?B.TYPE,?B.TIME,?A.ID
FROM?TMP1?A
LEFT?JOIN?TMP1?B
ON??A.TYPE?!=?B.TYPE?AND
A.ID?=?B.ID?AND
A.RN?=?B.RN
WHERE?A.TYPE?=?'Logged?In'
①前言:通过使用FineBI进行"点地图"方式来展现数据.
substr函数的用法 :
取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串.
substr( string, start_position, [ length ] )? ? 即:? substr('目标字符串',开始位置,长度)
instr函数的用法 :
instr是一个非常好用的字符串处理函数,几乎所有的字符串分隔都用到此函数.
oracle 中可以用connect by把字符串按都好分割:
比如定义字符串:
SELECT DISTINCT REGEXP_SUBSTR (pv_no_list,'[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR (pv_no_list,'[^,]+',1,LEVEL) IS NOT NULL
order by 1
返回结果:
TOKEN
上面的语句是按照下划线来划分为三段,需要注意的oracle中substr函数,是从第i位开始截取长度为j的字段
以上就是土嘎嘎小编为大家整理的oracle怎么拆分列相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!