substr

题:求出'SDR#SGSJ#SHGSF%##' 里面第二个# 和第三个#之间的内容

思路:
1.找到第二个#和第三个#所在的位置
2.然后截取这两位置之间

第1步用instr函数
第2步用substr函数

select substr('SDR#SGSJ#SHGSF%##',instr('SDR#SGSJ#SHGSF%##','#',1,2)+1,instr('SDR#SGSJ#SHGSF%##','#',1,3)-instr('SDR#SGSJ#SHGSF%##','#',1,2)-1)
from dual; 

select substr('SDR#SGSJ#SHGSF%##',instr('SDR#SGSJ#SHGSF%##','#',1,2)+1,instr('SDR#SGSJ#SHGSF%##','#',1,3)-instr('SDR#SGSJ#SHGSF%##','#',1,2)-1)
from dual;  

特别要注意加1减1的细节!!

不然就会多打或者少打一个字符

我们计算的是两个#的位置以及两个#位置的差值,但要截取的是两个#之间的字符串(不包括两个#!),要的也是两个#之间字符串的长度,不包括左右两边的两个#

所以就可能会涉及到加1减1

这是要特别注意的

 

 

你可能感兴趣的:(SQL-Oracle,数据库)