select *
创新互联建站专注于企业网络营销推广、网站重做改版、涉县网站定制设计、自适应品牌网站建设、H5高端网站建设、成都做商城网站、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为涉县等各大城市提供网站开发制作服务。
from (select trim(regexp_substr(A, '[^,]+', 1, IDX)) ftype
from tablename a, (select level IDX from dual connect by level 1000) b
where a.A = '1101309030222121') c
where c.ftype is not null
上面的SQL比较麻烦,但一条SQL可以出来,你可以试一下
另外,你可以写一下函数进行拆分,把相关的逻辑放到函数体里面,看起来比较简洁
希望可以帮到你
加个序号,然后自连接就行了,例子:(自己造的数据,表、字段自己替换)
--数据模拟
WITH TMP AS
(SELECT CASE
WHEN MOD(LEVEL, 2) = 1 THEN
'Logged In'
ELSE
'Logged Out'
END AS TYPE, SYSDATE + LEVEL / 24 AS TIME, '4001' AS ID
FROM DUAL
CONNECT BY LEVEL = 10
UNION ALL
SELECT CASE
WHEN MOD(LEVEL, 2) = 1 THEN
'Logged In'
ELSE
'Logged Out'
END AS TYPE, SYSDATE + LEVEL AS TIME, '5001' AS ID
FROM DUAL
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'
1.前言:通过使用FineBI进行“点地图”方式来展现数据。
2.遇到的问题:原始表 经纬度 是一个字段保存,比如 xy列 中某行值为“130.111111,33.999999”。
3.解决的方法:通过 xy列 中’,‘逗号并使用函数substr()和函数instr() 处理后效果图和SQL示例如下
4.附注:
substr函数的用法 :
取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串。
substr( string, start_position, [ length ] ) 即: substr('目标字符串',开始位置,长度)
instr函数的用法 :
格式一:instr( string1, string2 ) 即: instr(源字符串, 目标字符串),本案例是使用此格式。
格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) 即:instr(源字符串, 目标字符串, 起始位置, 匹配序号)
解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。
instr是一个非常好用的字符串处理函数,几乎所有的字符串分隔都用到此函数。
oracle 中可以用connect by把字符串按都好分割:
比如定义字符串:
pv_no_list :='23,34,45,56';
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
23
34
45
56
上面的语句是按照下划线来划分为三段,需要注意的oracle中substr函数,是从第i位开始截取长度为j的字段