2016-12-09 5 views
1

Мне нужно получить второе слово каждого имени в столбце, я сделал свое исследование о substr и instr, но я думаю, что у меня есть логическая ошибка, я просто не могу указать на это ,Получение второго слова из строки в SQL Oracle

select substr(vendor_name,instr(vendor_name, ' ')+1) from vendors ORDER BY vendor_id asc; 

Here is my current output, the code works, but it does not do what I want it to do.

+0

regexp_substr - ваш друг ... намного лучше, чем substr и instr – OscarAkaElvis

ответ

1

Попробуйте этот запрос:

SELECT SUBSTR(vendor_name, 
       INSTR(vendor_name, ' ', 1, 1) + 1, 
       INSTR(vendor_name, ' ', 1, 2) - INSTR(vendor_name, ' ', 1, 1) - 1) 
FROM vendors 
ORDER BY vendor_id 

Чтобы увидеть, как это работает, рассмотрим пример vendor_name из Boeing Corporation Inc. В этом случае:

INSTR(vendor_name, ' ', 1, 1) = 7 = first occurrence of space 
INSTR(vendor_name, ' ', 1, 2) = 19 = second occurrence of space 

Теперь здесь вызов, который мы делаем, в подстроку:

SELECT SUBSTR('Boeing Corporation Inc.', 
       7 + 1, 
       19 - 7 - 1) 

, который так же, как

SELECT SUBSTR('Boeing Corporation Inc.', 8, 11) = 'Corporation' 

Обратите внимание, что мой ответ предполагает, что есть второе пространство присутствует в vendor_name (а также первое пространство). Если вы ожидаете появления сложных данных в этом столбце, вместо этого вы можете использовать регулярное выражение.

+0

Хорошо, что работает, спасибо вам большое, но я не понимаю последнюю часть, где вы вычитаете. Я понимаю, что в первой части вы получите строку со следующим словом +1, чтобы удалить пространство. Но после этого я пытаюсь пошаговый ввод, а вывод не имеет смысла, например, как он может дать мне это [link] (http://i.imgur.com/W66oy4N.png), когда мой input это: 'SELECT SUBSTR (vendor_name, INSTR (vendor_name, '', 1, 1) + 1, INSTR (vendor_name, '', 1, 2)) FROM поставщиков ORDER BY vendor_id;' –

+0

, потому что вам нужно добавьте третий параметр в функцию Substr, чтобы ограничить длину строки, которую она извлекает. 'INSTR (vendor_name, '', 1, 2) - INSTR (vendor_name, '', 1, 1) - 1' длина между 1-м и 2-м пробелами. –

+0

@AlexTonitoi Позвольте мне добавить пример, и вы увидите, что происходит. –

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