我正在使用Oracle 11g数据库,我想找到字符串最后一个字符的位置。
例如:
"City=Amsterdam"
这种情况下的字符串是“City =”,我想得到“=”的位置。 我知道INSTR(输入,'City =',1,1)+4,有点工作,但我正在寻找另一种方式。
编辑:基本上我想使用substr函数来提取“Amsterdam”。但是select语句应该尽可能干净。
我忘记提及,字符串包含的内容超过“City = Amsterdam”,它还包含“Customer = 124”
"City=Amsterdam"; "Customer=124"
答案 0 :(得分:3)
INSTR('City=Amsterdam', '=', -1)
使用-1表示开始pos!
来自你的评论,回答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:
答案 1 :(得分:0)
你真的不会使用:
INSTR(Input,'City=')+ length('City=') - 1
这似乎是最佳代码。