如下:
ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z
ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.YYYYMMDD.XX.Z
XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z能否一句sql查询结果应有4列,如下?YYYYMMDD出现的次数(1次)
YYYYMMDD出现次数为1的时候 YYYYMMDD第一次出现的 前面的 [.]或者[_]的总次数
YYYYMMDD出现的次数(2此) 如果只出现一次,则填0
YYYYMMDD出现次数为2的时候 YYYYMMDD第二次出现的 前面的 [.]或者[_]的总次数 如果只出现一次,则填0举例如下:
源 :ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z
结果:1 5(第一个YYYYMMDD前面的点的出现的次数) 0 0
源 : XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z
结果:1 3(第一个YYYYMMDD前面的点的出现的次数) 2 9(第二个YYYYMMDD前面的_出现的次数含点出现的次数)请牛人帮忙想下,谢谢~
ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z
ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.YYYYMMDD.XX.Z
XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z能否一句sql查询结果应有4列,如下?YYYYMMDD出现的次数(1次)
YYYYMMDD出现次数为1的时候 YYYYMMDD第一次出现的 前面的 [.]或者[_]的总次数
YYYYMMDD出现的次数(2此) 如果只出现一次,则填0
YYYYMMDD出现次数为2的时候 YYYYMMDD第二次出现的 前面的 [.]或者[_]的总次数 如果只出现一次,则填0举例如下:
源 :ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z
结果:1 5(第一个YYYYMMDD前面的点的出现的次数) 0 0
源 : XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z
结果:1 3(第一个YYYYMMDD前面的点的出现的次数) 2 9(第二个YYYYMMDD前面的_出现的次数含点出现的次数)请牛人帮忙想下,谢谢~
解决方案 »
- table名可以做参数吗
- oracle中的日期问题!!
- 关于一个sql语句的问题
- 请教在oracle中如何得到客户提交的事务的信息?
- table被drop了却还存在?
- 用户买了套oracle9i for win ,有了licenses是不可以申请csi号,再在Metalink注册,怎么申请csi号?
- 一个SQL语句如何实现这个效果。
- 请问partition by什么意思,如何用?
- 请问oracle中怎样更表的字段类型或名字??
- ORA-01417 : 表可以外部连接到至多一个其他的表?
- 数据库开发是什么 数据库二次开发是什么
- 函数里面的SQL语句,怎样使用传入的参数作为条件表达式? 有例子不抽象,请进
--insert into tb
--select 'ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z' from dual union all
--select 'ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.YYYYMMDD.XX.Z' from dual union all
--select 'XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z' from dual ;select
trunc((length(id)-length(replace(id,'YYYYMMDD','')))/6) as n1,
length(substr(id,1,instr(id,'YYYYMMDD')))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD')),'.',''),'_','')) as n2,
case when instr(id,'YYYYMMDD',1,2)=0 then 0 else 2 end as n3,
case when instr(id,'YYYYMMDD',1,2)=0 then 0
else length(substr(id,1,instr(id,'YYYYMMDD',1,2)))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD',1,2)),'.',''),'_','')) end as n4
from tb
N1 N2 N3 N4
1 5 0 0
2 5 2 7
2 3 2 9
case when trunc((length(id)-length(replace(id,'YYYYMMDD','')))/6)=0 then 0 else 1 end as n1,
length(substr(id,1,instr(id,'YYYYMMDD')))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD')),'.',''),'_','')) as n2,
case when instr(id,'YYYYMMDD',1,2)=0 then 0 else 2 end as n3,
case when instr(id,'YYYYMMDD',1,2)=0 then 0
else length(substr(id,1,instr(id,'YYYYMMDD',1,2)))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD',1,2)),'.',''),'_','')) end as n4
from tbN1 N2 N3 N4
1 5 0 0
1 5 2 7
1 3 2 9 改下
insert into t1 values('ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.XX.Z
ZDFF.LIST.NNNNN.NNNNN.YYYYMM.YYYYMMDD.NNNNN.YYYYMMDD.XX.Z
XSXX.NNN.NNNNN.YYYYMMDD.NNNN.dat.NNNN_NN_NNN_YYYYMMDD_NNNNNN.dat.Z');with t2 as(
select level rn from dual connect by level < 100
)
select case when instr(id,'YYYYMMDD',1,rn) != 0
then length(substr(id,0,instr(id,'YYYYMMDD',1,rn)-1)) - length(replace(substr(id,0,instr(id,'YYYYMMDD',1,rn)-1),'.',''))
else 0 end from t1,t2
SELECT NAME, DECODE(Y_CNT,1,Y_CNT,DECODE(Y_CNT,2,1,0)) AS Y_CNT,
DECODE(Y_CNT,0,0,D_CNT-(length(S.REMAIN)-length(replace(S.REMAIN,'.','')))/1) AS DR_CNT,
DECODE(Y_CNT,1,0,Y_CNT) AS YY_CNT,
DECODE(Y_CNT,1,0,G_CNT-(length(S.REMAIN)-length(replace(S.REMAIN,'_','')))/1+DECODE(Y_CNT,0,0,D_CNT-(length(S.REMAIN)-length(replace(S.REMAIN,'.','')))/1)) AS DG_CNT
FROM (select t.name,
(length(t.name)-length(replace(t.name,'YYYYMMDD','')))/8 as Y_cnt ,--计算'YYYYMMDD'出现次数
SUBSTR(NAME,instr(t.name,'YYYYMMDD',1,(length(t.name)-length(replace(t.name,'YYYYMMDD','')))/8)) AS REMAIN,--计算最后个YYYYMMDD位置之后的字符串
(length(t.name)-length(replace(t.name,'.','')))/1 AS D_CNT,--计算'.'出现次数
(length(t.name)-length(replace(t.name,'_','')))/1 AS G_CNT --计算'-'出现次数
from ss t
) S
case when (length(id)-length(replace(id,'YYYYMMDD','')))/8=0 then 0 else 1 end as n1,
--应该是8不是6
length(substr(id,1,instr(id,'YYYYMMDD')))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD')),'.',''),'_','')) as n2,
case when instr(id,'YYYYMMDD',1,2)=0 then 0 else 2 end as n3,
case when instr(id,'YYYYMMDD',1,2)=0 then 0
else length(substr(id,1,instr(id,'YYYYMMDD',1,2)))-length(replace(replace(substr(id,1,instr(id,'YYYYMMDD',1,2)),'.',''),'_','')) end as n4
from tb