一句话中的最后一个词:在 SQL 中(可以使用正则表达式吗?)
我需要在 Oracle SQL (10gR2) 中完成此操作。但我想,我宁愿说得直白一点,任何好的、高效的算法都可以。
给定一行(或句子,包含一个或多个单词,英语),您将如何找到该句子的最后一个单词?
这是我在 SQL 中尝试过的。但是,我希望看到一种有效的方法来做到这一点。
select reverse(substr(reverse(&p_word_in)
, 0
, instr(reverse(&p_word_in), ' ')
)
)
from dual;
这个想法是反转字符串,找到第一个出现的空格,检索子字符串并反转字符串。是不是效率很高呢?是否可以使用正则表达式?我使用的是 Oracle 10g R2。但我不介意看到其他编程语言的任何尝试,如果需要的话,我不介意编写 PL/SQL 函数。
更新:
杰弗里·坎普给出了一个精彩的答案。这非常有效。
回答
SELECT SUBSTR(&sentence, INSTR(&sentence,' ',-1) + 1)
FROM dual
I need this to be done in Oracle SQL (10gR2). But I guess, I would rather put it plainly, any good, efficient algorithm is fine.
Given a line (or sentence, containing one or many words, English), how will you find the last word of the sentence?
Here is what I have tried in SQL. But, I would like to see an efficient way of doing this.
select reverse(substr(reverse(&p_word_in)
, 0
, instr(reverse(&p_word_in), ' ')
)
)
from dual;
The idea was to reverse the string, find the first occurring space, retrieve the substring and reverse the string. Is it quite efficient? Is a regular expression available? I am on Oracle 10g R2. But I dont mind seeing any attempt in other programming language, I wont mind writing a PL/SQL function if need be.
Update:
Jeffery Kemp has given a wonderful answer. This works perfectly.
Answer
SELECT SUBSTR(&sentence, INSTR(&sentence,' ',-1) + 1)
FROM dual
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我认为 INSTR/SUBSTR 更简单:
I reckon it's simpler with INSTR/SUBSTR:
不确定它的性能如何,但这应该可以做到:
Not sure how it is performance wise, but this should do it:
我不确定是否可以在 oracle 中使用正则表达式,但是
(\w+)\W*$
不起作用吗?
I'm not sure if you can use a regex in oracle, but wouldn't
(\w+)\W*$
work?
这个正则表达式匹配一行中的最后一个单词:
RegexBuddy 给出了在 Oracle 中使用的代码:
This regex matches the last word on a line:
And RegexBuddy gives this code for use in Oracle:
这留下了标点符号,但得到了最终的词
this leaves the punctuation but gets the final word
即使对于非英语单词,这也有效:
This works too, even for non english words :