3

我正在使用 Oracle 11g DB,我想找到字符串最后一个字符的位置。

例如:

"City=Amsterdam"

这种情况下的字符串是“City=”,我想得到“=”的位置。我知道 INSTR(Input,'City=', 1, 1)+4,会有点用,但我正在寻找另一种方法。

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

我忘了说,字符串包含的不仅仅是“City=Amsterdam”,它还包含“Customer=124”

"City=Amsterdam"; "Customer=124"
4

2 回答 2

3
INSTR('City=Amsterdam', '=', -1)

使用 -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"');

查看更新的 SQLFIDDLE:

于 2013-09-14T10:09:31.643 回答
0

你真的不会使用:

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

这似乎是最佳代码。

于 2013-09-14T10:10:56.613 回答