例如数据为:AA;B;CCC;DDDD;E;F;120;ccc 想取固定位置的120
需要使用到2个函数
substr字符截取函数
格式1: substr(string str,int a);
格式2:substr(string str, int a,int b) ;
显然需要使用格式2的函数
select substr('AA;B;CCC;DDDD;E;F;120;ccc',19,3) from dual;
问题是如何去19的位置和3的长度,(注:19和3的角标会根据字符串长度进行变化)
instr()函数
格式1: instr(string str,string str1,int a);
格式2:instr(string str, string str1,int a,int b) ;
使用格式2
select instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,6)+1 from dual;
从第一位开始找字符串;第六个出现的位置+1
select instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,7)+1 from dual;
计算第6个位置到第七个位置的长度
select instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,7)-instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,6)-1 from dual;
总体使用:
数“;”出现的位置,计算出该位置之后取的字符串长度,然后进行字符串截取。
select substr('AA;B;CCC;DDDD;E;F;120;ccc',instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,6)+1,instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,7)-instr('AA;B;CCC;DDDD;E;F;120;ccc',';',1,6)-1) from dual;