Instr与SubstrB语法的学习

原创 2011年01月17日 15:27:00

2011-01-17

好久没有写下自己的心得了,现将Instr与SubStrB语法学习的心得放于博客上供大家学习与参考.在此主要放一些语法与结果,会在留言版中进行补充说明,希望大家不吝赐教.多提宝贵意见,以弥补不足之处.


SELECT A.DATA_OLD,Decode(Instr(A.UPD_DATA,'-'),1,'0',SubstrB(A.UPD_DATA,1,Instr(A.UPD_DATA,'-') - 1)) OQ, 

   SubstrB(A.UPD_DATA,Instr(A.UPD_DATA,'-') +4) NQ

FROM

(

SELECT DATA_OLD,Trim(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9)) UPD_DATA

FROM UPDATE_LOG 

WHERE DATA_OLD LIKE 'FACT_NO:B0HW         PRO_DATE:201012%'

  AND (Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'1') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'2') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'3') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'4') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'5') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'6') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'7') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'8') > 0

   or Instr(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9),'9') > 0)

ORDER BY SER_NO)A

结果如下:

DATA_OLD                                                                                                               OQ NQ
FACT_NO:B0HW PRO_DATE:20101201 SEC_NO:300007 TIME_NO:02 DATA_KIND:3 FACT_ODR_NO:BA10110027 SIZERUN:L07- HAND_QTY:--->12 0 12
FACT_NO:B0HW PRO_DATE:20101201 SEC_NO:300007 TIME_NO:02 DATA_KIND:3 FACT_ODR_NO:BA10110027 SIZERUN:L08 HAND_QTY:--->18 0 18
FACT_NO:B0HW PRO_DATE:20101201 SEC_NO:300007 TIME_NO:03 DATA_KIND:3 FACT_ODR_NO:BA10110027 SIZERUN:L08- HAND_QTY:--->60 0 60
FACT_NO:B0HW PRO_DATE:20101201 SEC_NO:300007 TIME_NO:03 DATA_KIND:3 FACT_ODR_NO:BA10110027 SIZERUN:L10- HAND_QTY:--->10 0 10
FACT_NO:B0HW PRO_DATE:20101202 SEC_NO:300007 TIME_NO:06 DATA_KIND:3 FACT_ODR_NO:BA10110018R2 SIZERUN:L14 HAND_QTY:--->8 0 8
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L07 HAND_QTY:--->10 0 10
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L08 HAND_QTY:--->20 0 20
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L09 HAND_QTY:--->42 0 42
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L10 HAND_QTY:--->60 0 60
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L11 HAND_QTY:--->60 0 60
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L12 HAND_QTY:--->30 0 30
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:5 FACT_ODR_NO:BA10110014 SIZERUN:L13 HAND_QTY:--->10 0 10
FACT_NO:B0HW PRO_DATE:20101203 SEC_NO:500009 TIME_NO:07 DATA_KIND:6 FACT_ODR_NO:BA10110014 SIZERUN:L07 HAND_QTY:--->10 0 10


接下来,我需要获取我所要的资料,语法如下:

SELECT FACT,REC_DATE,SEC_NO,TN,D,ODR_NO,HAND_QTY,

       DATA_OLD,Decode(Instr(UPD_DATA,'-'),1,'0',SubstrB(UPD_DATA,1,Instr(UPD_DATA,'-') - 1)) OQ, 

       SubstrB(UPD_DATA,Instr(UPD_DATA,'-') +4) NQ

FROM       

(SELECT SUBSTR(DATA_OLD,9,4) FACT,SUBSTR(DATA_OLD,31,8) REC_DATE,SUBSTR(DATA_OLD,55,6) SEC_NO,

       SUBSTR(DATA_OLD,78,2) TN,SUBSTR(DATA_OLD,99,2) D,TRIM(SUBSTR(DATA_OLD,121,18)) ODR_NO,

       TRIM(SUBSTR(DATA_OLD,158,4)) SIZERUN,SUBSTR(DATA_OLD,170,20) HAND_QTY,

       Trim(SUBSTRB(DATA_OLD,Instr(DATA_OLD,'HAND_QTY:') + 9)) UPD_DATA,DATA_OLD 

FROM UPDATE_LOG 

WHERE SUBSTR(DATA_OLD,9,4) LIKE 'B0HW%' AND  SUBSTR(DATA_OLD,31,8) LIKE '201012%');

结果如下:

FACT REC_DATE SEC_NO TN D ODR_NO     HAND_QTY       OQ NQ
B0HW 20101201 300007 02 3 BA10110027 HAND_QTY:--->12 0 12
B0HW 20101201 300007 02 3 BA10110027 HAND_QTY:--->18 0 18
B0HW 20101201 300007 03 3 BA10110027 HAND_QTY:--->60 0 60
B0HW 20101201 300007 03 3 BA10110027 HAND_QTY:--->10 0 10
B0HW 20101202 300007 06 3 BA10110018R2 HAND_QTY:--->8 0 8
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->10 0 10
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->20 0 20
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->42 0 42
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->60 0 60
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->60 0 60
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->30 0 30
B0HW 20101203 500009 07 5 BA10110014 HAND_QTY:--->10 0 10
B0HW 20101203 500009 07 6 BA10110014 HAND_QTY:--->10 0 10

oracle中INSTR函数的用法

今天有个同学问我这个INSTR函数,我也不太清楚就上网查了查做一个小小的记录吧 INSTR(C1,C2,I,J)  在一个字符串中搜索指定的字符,返回发现指定的字符的位置;  C1 ...
  • Q1059081877Q
  • Q1059081877Q
  • 2015年07月27日 22:05
  • 18291

2014年domino学习小结

lotus domino notes
  • java_jane
  • java_jane
  • 2015年03月19日 23:24
  • 1608

学习C语言常见的几个问题及解决方法

所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。   ...
  • bentengdehe
  • bentengdehe
  • 2016年04月28日 16:52
  • 1389

Oracle模糊查询之(3.2从使用函数和sql语法角度来提高模糊查询效率 二)ORACLE中Like与Instr模糊查询性能大比拼

ORACLE中Like与Instr模糊查询性能大比拼 ORACLE中Like与Instr模糊查询性能大比拼     instr(title,'手册')>0  相当于  title like '%手册...
  • haiross
  • haiross
  • 2013年10月23日 16:50
  • 4682

Oracle INSTR函数(子字符串查询)语法详解及应用实例

据说以下这道看似简单的问题可以测试Oracle查询的能力: 问题: 答案: select c.ci_id,wm_concat(s.stu_name) from pm_ci ...
  • hpdlzu80100
  • hpdlzu80100
  • 2016年12月26日 22:47
  • 2463

oracle学习 instr 方法

看看研究结果,呵呵: /* INSTR   (源字符串, 目标字符串, 起始位置, 匹配序号)   在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索...
  • lushuaiyin
  • lushuaiyin
  • 2012年03月07日 17:34
  • 370

substr() 和 substrb()

substr() 和 substrb()      以前知道有substrb,lengthb等函数,也知道它们是以byte来计算长度,可没用过,也不太明白什么地方需要用到它们。一...
  • lost_david
  • lost_david
  • 2012年05月25日 15:38
  • 1638

Oracle substr()与substrb()

一直以来都是用substr()来截取字符串的一部分,虽然知道有substrb(),也知道substrb()是以byte(字节)来计算长度,可没用过,也不太明白什么地方需要用到它们,今天刚好测试了一下这...
  • u010202304
  • u010202304
  • 2015年04月06日 20:58
  • 3920

pci dss saq instr guide v2.0

  • 2012年08月24日 01:29
  • 469KB
  • 下载

Replace,Instr函数不区别大小写的方法

转自:http://cancait.blog.163.com/blog/static/21335744201061522243144/ 有时候感觉互联网是万能的,什么答案都能到,但还是有时候不能直接找...
  • jiutao_tang
  • jiutao_tang
  • 2011年03月06日 11:06
  • 4537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Instr与SubstrB语法的学习
举报原因:
原因补充:

(最多只允许输入30个字)