2017-02-22 36 views
1

У меня есть строка, как показано ниже, и мне нужно получить в ней 10472314. Это последнее слово, но одно в этом случае. Можете ли вы сообщить мне, как получить его в PL/SQL-блоке? Любая строковая функция?Как получить второе последнее слово в строке?

processed "SCOTT"."PRINCE05"       10472314 rows 

@ UPDATE

Наконец, мне удалось создать решение, используя строковые функции.

SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
+0

Если вы честны, вы признаете, что если вы снова прочитаете вопрос (и притворитесь, что не знаете, о чем идет речь), это даже не имеет смысла для ВАС. Как это должно иметь смысл для США? Что вы подразумеваете под «количеством строк в строке»? И что это связано с «Как получить ** конкретное слово ** в строке» (ВАШЕ название)? – mathguy

+0

Спасибо за комментарий. Я изменил название и заявления. Извините, что смутил вас. – Sigularity

+0

OK - Я предполагаю, что вы имеете в виду слово «от второго до последнего» (что означает второе слово из конца строки). Это то, что вам всегда нужно, второе-последнее слово в строке? И как вы определяете «слово» - что-либо, разделенное пробелами (или пробелами, вкладками, символами новой строки - то, что обычно называют «пробелами»)? – mathguy

ответ

0

Если мы используем магическую опцию '-1' в INSTR, мы можем искать строку в обратном порядке. Делая это, я считаю, что мы можем найти последнее слово, но одно, как показано ниже. Он выглядит грязным, но он просто работает для меня.

SELECT SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
FROM prince_test; 

INSTR(name, ' ', -1 , 2) + 1 ==> the second occurrence of SPACE 
INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2) ==> position gap between the first occurrence and the second. 
1

Набор цифр перед словом 'строки' в конце строки:

regexp_replace(text, '^(.+)([0-9]+)(rows)$', '\2') 

Третье слово:

regexp_substr(text, '\S+', 1, 3) 

Второе последнее слово (The н-е слово, где n = количество слов -1):

regexp_substr(text, '\S+', 1, regexp_count(text,'\S+') -1) 

Если вы обрабатываете значительное количество строк, функции регулярного выражения могут быть медленными. Компромисс, который вы должны сделать, заключается в выражении регулярных выражений и производительности простых substr и instr. Лично я предпочитаю регулярные выражения, если нет четкой проблемы с производительностью.

+0

Это работает. Спасибо за комментарий. – Sigularity

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

  • Нет связанных вопросов^_^