2013-09-14 3 views
3

Я использую Oracle 11g DB, и я хочу найти позицию последнего символа строки.Instr - последний индекс последнего символа

Например:

"City=Amsterdam" 

строка в этом случае будет «Город =», я хотел бы получить позицию «=». Я знаю, что INSTR (Input, 'City =', 1, 1) +4, будет работать, но я ищу другой способ.

Редактировать: В принципе, я хочу использовать функцию substr для извлечения «Амстердам». Но оператор select должен быть как можно более чистым.

То, что я забыл упомянуть, строка содержит более "City = Амстердам", она содержит также "Клиент = 124"

"City=Amsterdam"; "Customer=124" 
+0

Было бы проще, если бы вы могли объяснить, что вы ожидаете получить. Пожалуйста, предоставьте демо-данные Som и ожидаемый результат. Вы хотите узнать последний индекс '=' или? – MrSimpleMind

+0

Вы хотите получить 5 (это индекс =) или хотите получить 14 (индекс последнего м в Амстердаме) или вы хотите получить 9 (который является индексом последнего m в Амстердаме от начала pos после = знак равенства) ??? – MrSimpleMind

+0

В основном я хочу использовать функцию substr для извлечения «Амстердама». Но оператор select должен быть как можно более чистым. – user2428207

ответ

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

использование -1 для запуска поз!

из вашего комментария, ответ 2

select SUBSTR(input, INSTR(input, '=', -1)+1) as city 
    from yourTable; 

И если у вас есть несколько полей, до или после, как вы упоминаете с клиентом = ... Вы можете сделать:

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:

+0

Я не уверен, что это точно такая же логика - если строка поиска была «ABC» против строки «XCABCFVCG», например? –

+0

Дэвид, я пытался еще раз прочитать вопрос. Я понимаю это как user4 ... хочет знать последний индекс '='. Но может быть, это не то, что он хочет? – MrSimpleMind

+0

Я обновил свой вопрос, прошу прощения за недоразумение – user2428207

0

не могли бы вы на самом деле использовать:

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

Это, кажется, оптимальный код.

Смежные вопросы