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函数(子字符串查询)语法详解及应用实例

据说以下这道看似简单的问题可以测试Oracle查询的能力: 问题: 答案: select c.ci_id,wm_concat(s.stu_name) from pm_ci ...

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
  • 4446

oracle学习 instr 方法

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

Oracle substr()与substrb()

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

substr() 和 substrb()

substr() 和 substrb()      以前知道有substrb,lengthb等函数,也知道它们是以byte来计算长度,可没用过,也不太明白什么地方需要用到它们。一...

pci dss saq instr guide v2.0

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

oracle的常用函数 instr() 和substr()函数

在Oracle中  可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。  在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置。  语法:  instr(source...

mysql的left,right,substr,instr截取字符串,截取小数点float

mysql的left,right,substr,instr截取字符串,截取小数点float2007-04-22 17:31 //------------------------------...

mysql字符串函数left、right、substr、instr用法

节内容: MySql的字符串函数 ASCII(str) 返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。   复制代...

Oracle中INSTR的用法

转自:http://blog.csdn.net/e_wsq/article/details/2983102 Oracle中INSTR的用法:  INSTR方法的格式为 INSTR(源字符串, 要查找...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Instr与SubstrB语法的学习
举报原因:
原因补充:

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