instr('312','1',2) 的结果解释

时间:2021-02-13 15:06:24
select instr('312','1',1) a, 
       instr('312','1',2) b,  
       instr('312','1',3) c from dual;
b=2 ?

14 个解决方案

#1


1和2(第三个参数)是指  开始查找的位置  也就是说1是从312的3开始找   2就是从312的1开始找
当然 都能找到‘1’这个字符   结果都是2

但是你从312的2开始找   就找不到“1”这个字符了

#2


position is an nonzero integer indicating the character of string where Oracle begins the search. If position is negative, then Oracle counts and searches backward from the end of string. 


第三个参数就是position

#3


instr('312','1',2) b,  返回查找第2个字符的位置
instr('312','1',3) c from dual; 返回查找第1个字符的位置

#4


第一个参数是要操作的数据,第二个参数是要找的数据,第三个参数从第几位开始找

#5


查manual去。。

#6


instr(result binary_integer,str1 in varchar2,str2 in varchar2,pos in binary_integer,nth in binary_integer);
在str1里面从第pos位置到第nth位置开始查找str2,返回第一个出现str2的位置(整个str1中得位置)

#7


引用 1 楼 horizonlyhw 的回复:
1和2(第三个参数)是指 开始查找的位置 也就是说1是从312的3开始找 2就是从312的1开始找
当然 都能找到‘1’这个字符 结果都是2

但是你从312的2开始找 就找不到“1”这个字符了
是的,补充一下
如果这个位置参数是负数,就从右边开始

#8


引用 1 楼 horizonlyhw 的回复:
1和2(第三个参数)是指  开始查找的位置  也就是说1是从312的3开始找   2就是从312的1开始找
当然 都能找到‘1’这个字符   结果都是2

但是你从312的2开始找   就找不到“1”这个字符了


正解 ,这种函数自己查文档很快的

#9



select instr('312','1',1) a,  
  instr('312','1',2) b,   
  instr('312','1',3) c from dual;

-------------
a  b   c
2  1   0


instr('312','1',2) 表示字符串'312'从第2个字符开始查找字符'1'的位置 这里返回的是1
instr('312','1',3) 表示字符串'312'从第3个字符开始查找字符'1'的位置 这里返回的是0(从第三个字符开始找不到字符'1'了)

#10


上面说错了,b应该是返回2
这个函数还有第4个参数表示第N次出现这个字符的位置

select instr('a-b-c-d-e','-',1,1) a,  
  instr('a-b-c-d-e','-',2,2) b,   
  instr('a-b-c-d-e','-',3,3) c from dual;

------------------------
a   b   c
2   4   8

#11


实测结果:
instr('312','1',2) 的结果解释

解释:
instr(参数1,参数2,参数3,参数4)
参数1:源字符串
参数2:要查找的字符串
参数3:从第几个字符开始查找(字符串中第1个字符的位置是1)
参数4:要查找字符串第几次出现。

#12


引用 11 楼 luiseradl 的回复:
实测结果:


解释:
instr(参数1,参数2,参数3,参数4)
参数1:源字符串
参数2:要查找的字符串
参数3:从第几个字符开始查找(字符串中第1个字符的位置是1)
参数4:要查找字符串第几次出现。


这个是正解

#13


引用 9 楼 mailking 的回复:
SQL code

select instr('312','1',1) a,  
  instr('312','1',2) b,   
  instr('312','1',3) c from dual;

-------------
a  b   c
2  1   0



instr('312','1',2) 表示字符串'312'从第2个字符开始查找字符'1'的位置 这里返回的是1
i……


如果你真的在 oracle上跑一下这个 sql ,就会发现结果不是 2 1 0 而是 2 2 0

因为即使是从第二位开始查找, ‘1’的位置也是从字符串的首位开始计算的

#14


谢谢各位。
当时用的时候少了一个参数,不是我我要的结果,还是粗心的错。

#1


1和2(第三个参数)是指  开始查找的位置  也就是说1是从312的3开始找   2就是从312的1开始找
当然 都能找到‘1’这个字符   结果都是2

但是你从312的2开始找   就找不到“1”这个字符了

#2


position is an nonzero integer indicating the character of string where Oracle begins the search. If position is negative, then Oracle counts and searches backward from the end of string. 


第三个参数就是position

#3


instr('312','1',2) b,  返回查找第2个字符的位置
instr('312','1',3) c from dual; 返回查找第1个字符的位置

#4


第一个参数是要操作的数据,第二个参数是要找的数据,第三个参数从第几位开始找

#5


查manual去。。

#6


instr(result binary_integer,str1 in varchar2,str2 in varchar2,pos in binary_integer,nth in binary_integer);
在str1里面从第pos位置到第nth位置开始查找str2,返回第一个出现str2的位置(整个str1中得位置)

#7


引用 1 楼 horizonlyhw 的回复:
1和2(第三个参数)是指 开始查找的位置 也就是说1是从312的3开始找 2就是从312的1开始找
当然 都能找到‘1’这个字符 结果都是2

但是你从312的2开始找 就找不到“1”这个字符了
是的,补充一下
如果这个位置参数是负数,就从右边开始

#8


引用 1 楼 horizonlyhw 的回复:
1和2(第三个参数)是指  开始查找的位置  也就是说1是从312的3开始找   2就是从312的1开始找
当然 都能找到‘1’这个字符   结果都是2

但是你从312的2开始找   就找不到“1”这个字符了


正解 ,这种函数自己查文档很快的

#9



select instr('312','1',1) a,  
  instr('312','1',2) b,   
  instr('312','1',3) c from dual;

-------------
a  b   c
2  1   0


instr('312','1',2) 表示字符串'312'从第2个字符开始查找字符'1'的位置 这里返回的是1
instr('312','1',3) 表示字符串'312'从第3个字符开始查找字符'1'的位置 这里返回的是0(从第三个字符开始找不到字符'1'了)

#10


上面说错了,b应该是返回2
这个函数还有第4个参数表示第N次出现这个字符的位置

select instr('a-b-c-d-e','-',1,1) a,  
  instr('a-b-c-d-e','-',2,2) b,   
  instr('a-b-c-d-e','-',3,3) c from dual;

------------------------
a   b   c
2   4   8

#11


实测结果:
instr('312','1',2) 的结果解释

解释:
instr(参数1,参数2,参数3,参数4)
参数1:源字符串
参数2:要查找的字符串
参数3:从第几个字符开始查找(字符串中第1个字符的位置是1)
参数4:要查找字符串第几次出现。

#12


引用 11 楼 luiseradl 的回复:
实测结果:


解释:
instr(参数1,参数2,参数3,参数4)
参数1:源字符串
参数2:要查找的字符串
参数3:从第几个字符开始查找(字符串中第1个字符的位置是1)
参数4:要查找字符串第几次出现。


这个是正解

#13


引用 9 楼 mailking 的回复:
SQL code

select instr('312','1',1) a,  
  instr('312','1',2) b,   
  instr('312','1',3) c from dual;

-------------
a  b   c
2  1   0



instr('312','1',2) 表示字符串'312'从第2个字符开始查找字符'1'的位置 这里返回的是1
i……


如果你真的在 oracle上跑一下这个 sql ,就会发现结果不是 2 1 0 而是 2 2 0

因为即使是从第二位开始查找, ‘1’的位置也是从字符串的首位开始计算的

#14


谢谢各位。
当时用的时候少了一个参数,不是我我要的结果,还是粗心的错。