Sql Instr-最后一个字符的最后一个索引

Sql Instr-最后一个字符的最后一个索引,sql,oracle,select,oracle11g,oracle10g,Sql,Oracle,Select,Oracle11g,Oracle10g,我使用的是Oracle11gdb,我想找到字符串最后一个字符的位置 例如: "City=Amsterdam" 本例中的字符串是City=,我想获取=。 我知道INSTRInput,'City=',1,1+4会有点效果,但我正在寻找另一种方法 编辑:基本上我想使用substr函数来提取阿姆斯特丹。但是select语句应该尽可能干净 我忘记提到的是,字符串包含的不仅仅是City=Amsterdam,它还包含Customer=124 "City=Amsterdam"; "Customer=124"

我使用的是Oracle11gdb,我想找到字符串最后一个字符的位置

例如:

"City=Amsterdam"
本例中的字符串是City=,我想获取=。 我知道INSTRInput,'City=',1,1+4会有点效果,但我正在寻找另一种方法


编辑:基本上我想使用substr函数来提取阿姆斯特丹。但是select语句应该尽可能干净

我忘记提到的是,字符串包含的不仅仅是City=Amsterdam,它还包含Customer=124

"City=Amsterdam"; "Customer=124"
使用-1表示开始位置

根据您的评论,回答2

select SUBSTR( input, INSTR(input, '=', -1)+1 ) as city 
  from yourTable;
如果你有更多的字段,在前面或后面,就像你提到的customer=。。。你可以做:

select substr(input, 
              INSTR(input,'City=')+5, 
              INSTR(input,'"', INSTR(input,'City='))-INSTR(input,'City=')-5 
             ) as city from city;
还有一种奇特的查询,用来评论并使它在其他领域更灵活

select substr(c.input, c.citystart, c.cityend - c.citystart) as city
from (
select input as input, 
       INSTR(input,'City=')+5 as citystart, 
       INSTR(input,'"', INSTR(input,'City=')) as cityend
from city) c;
测试数据:

create table city (input char(64));

insert into city values('"City=Amsterdam"; "Customer=124"');

insert into city values('"Customer=11"; "City=USA"');

insert into city values('"Tel=+00"; "City=China"; "Customer=1"');

insert into city values('"Tel=+00"; "Post=11111";  "Customer=333"; "City=Canada"');

请参阅更新的

您是否实际使用:

INSTR(Input,'City=')+ length('City=') - 1

这似乎是最佳的代码。

我不确定这是否是完全相同的逻辑-例如,如果搜索字符串是“ABC”而不是字符串“XCABCFVCG”?David,我又试着读了一遍这个问题。我理解为用户4。。。想知道“=”的最后一个索引。但也许这不是他想要的?这让事情完全不同了!您需要找到城市的起点和终点位置。开始很简单,是City=而结束是???如上所示,City&值总是在两个…,因此我会将City=之后的第一个标记为结束位置。如果您能够解释您希望收到的内容,这会更容易。请提供som演示数据和预期输出。你想知道“=”的最后一个索引还是?你想接收5,它是=的索引,还是你想接收14,它是阿姆斯特丹最后一个m的索引,还是你想接收9,它是阿姆斯特丹最后一个m的索引,从开始位置=等号之后???基本上我想使用substr函数来提取阿姆斯特丹。但是select语句应该尽可能干净。如果在city=。。。见下文
INSTR(Input,'City=')+ length('City=') - 1