Как получить второе последнее слово в строке?

62
6

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

processed "SCOTT"."PRINCE05"                         10472314 rows

@ОБНОВИТЬ

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

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

спросил(а) 2021-01-19T17:33:32+03:00 2 месяца, 4 недели назад
1
Решение
62

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

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

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

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

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

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

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

ответил(а) 2021-01-19T17:33:32+03:00 2 месяца, 4 недели назад
45

Если мы используем магическую опцию -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.

ответил(а) 2021-01-19T17:33:32+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема