在Oracle Select中从字符串中检索前X个单词

时间:2015-06-03 12:53:04

标签: oracle regexp-replace regexp-substr

我需要选择字符串中的前X个单词,其中x可以是0-100之间的任意数字。是否有捷径可寻?我找到了以下示例来从字符串中选择前两个单词:

select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','\1') as first_two
from dual

如何从字符串中选择前X个单词,其中X可以是0-100的数字?

3 个答案:

答案 0 :(得分:3)

选择前四个单词:

select
   regexp_replace(
     'Hello world this is a test etc',
     '(((\w+)\s){4}).*',  -- Change 4 to wanted number of words here!
     '\1'
   )
   from dual;

修改

上述解决方案仅在单词由一个空格字符分隔时才有效。如果单词由一个或多个空格字符分隔,则\s必须扩展为\s+

select
   regexp_replace(
     'Hello    world   this   is a   test     etc',
     '(((\w+)\s+){4}).*',  -- Change 4 to wanted number of words here!
     '\1'
   )
   from dual;

答案 1 :(得分:1)

此方法采用提取所需单词数的结果,然后将多个空格减少为一个:

select trim(regexp_replace(regexp_substr('Hello         world this is a test etc', '(([^ ]*)( |$)*){3}'), ' +', ' '))
from dual;
编辑:这变得很难看,但在它周围缠绕了一个TRIM()来摆脱尾随空格(选择最后一个单词之后的空格)。

答案 2 :(得分:0)

这样做会,但它可能有点不优雅,取代" 2"用要查找的单词数量

select substr('this is a number of words',1,instr('this is a number of words',' ',1,2))
from dual

假设单词总是以空格结尾