一尘不染

句子中的最后一句话:在SQL中(可能使用正则表达式吗?)

algorithm

我需要在Oracle SQL(10gR2)中完成此操作。但是我想,我宁愿说清楚一点,任何好的,高效的算法都可以。

给定一行(或一个句子,包含一个或多个单词,英语),您如何找到句子的最后一个单词?

这是我在SQL中尝试过的方法。但是,我希望看到一种有效的方法。

select reverse(substr(reverse(&p_word_in)
                         , 0
                         , instr(reverse(&p_word_in), ' ')
                         )
                  )
      from dual;

想法是反转字符串,找到第一个出现的空间,检索子字符串并反转字符串。效率很高吗?是否提供正则表达式?我正在使用Oracle 10g
R2。但是我不介意看到其他编程语言的任何尝试,如果需要的话,我也不介意编写PL / SQL函数。

更新:

杰弗里·肯普(Jeffery Kemp)给出了一个很好的答案。这很完美。

回答

SELECT SUBSTR(&sentence, INSTR(&sentence,' ',-1) + 1)
FROM dual

阅读 230

收藏
2020-07-28

共1个答案

一尘不染

我认为使用INSTR / SUBSTR更简单:

WITH q AS (SELECT 'abc def ghi' AS sentence FROM DUAL)
SELECT SUBSTR(sentence, INSTR(sentence,' ',-1) + 1)
FROM q;
2020-07-28