关于oracle instr 函数的问题 例如:instr('abcd','ab',-77,1)>0,显然没这么多位,为什么结果还会是1呢?

我想知道这个负数检索是怎么回事,一直搞不明白,10分哦,很容易拿的。

INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
所以结果不可能是1
附加实例:
--SELECT instr('abcd','ab',-77,1) FROM DUAL;
DECLARE
V VARCHAR2(10);
BEGIN
IF instr('abcd','ab',-77,1)>0 THEN
DBMS_OUTPUT.put_line('111');
ELSE
DBMS_OUTPUT.put_line('000');
END IF;

END;追问

看来我描述的不是很清楚,这样吧,假设查询一张表A的no字段
select a.no from A a where a.id = '12' 结果为'CNDEA'
现在,我使用instr函数
select instr(a.no,'CN',1,1) from A a where a.id = '12' 结果为1这里若正数6,结果为0,我试过好多次了
select instr(a.no,'CN',-12,1) from A a where a.id = '12' 结果为1
。。。。不管负数多大,结果都能查到1,但是正数就不行了,请问这是为什么?

追答

select instr(a.no,'CN',1,1) from A a where a.id = '12' 结果为1这里若正数6,结果为0,
答:因为你的字段总长是5.所以从6开始是找不到'CN'的
select instr(a.no,'CN',-12,1) from A a where a.id = '12'
答:我测试的结果是0而不是你说的1

如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。

追问

第一个答,我明白,第二个不准确吧,我这里测试的结果分明是1哦

追答

SELECT instr('CNDEA','CN',-12,1) FROM DUAL;

真的是0奥

追问

把你的建表语句和查询语句贴出来,如果真是0,我给你分(虽然答案并非我想要的。)

追答

DUAL,是ORACLE的默认临时表。只是用它来测试instr的结果。我回答问题不是为了分,是相互交流和帮助。

追问

我知道是临时表,也不是分的问题,问

题是我这边确实是1

追答

真的是0哦

追问

无解了,真无解了。

追答

。。。。要不,,你再看下INSTR解释和问下同事。我的理解就是这样的了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-12
select instr('abcd','ab',-77,1) from dual;

这个返回是0,不是1 啊
第2个回答  2012-10-12
-77 ,没有!有就不是1了。追问

你可以尝试下看看,我这边是1的,而且你这个回答跟我问的一点都不搭边,相信你没碰到这个问题