从 Oracle Select 中的字符串中检索前 X 个单词
Retrieving first X words from a string in Oracle Select
我需要 select 字符串中的前 X 个单词,其中 x 可以是 0-100 之间的任意数字。是否有捷径可寻?我发现以下示例 select 字符串中的前 2 个单词:
select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','') as first_two
from dual
我如何 select 字符串中的前 X 个单词,其中 X 可以是 0-100 之间的数字?
这样就可以了,但可能有点不雅,将“2”替换为要查找的字数
select substr('this is a number of words',1,instr('this is a number of words',' ',1,2))
from dual
是否假设单词总是以 space
结尾
选择前四个词:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s){4}).*', -- Change 4 to wanted number of words here!
''
)
from dual;
编辑
以上解决方案仅在单词由 恰好一个 白色 space 字符分隔时有效。如果单词由一个或多个白色 space 字符分隔,则 \s
必须扩展为 \s+
:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s+){4}).*', -- Change 4 to wanted number of words here!
''
)
from dual;
此方法取你想要的字数提取结果,然后将多个space减少为一个:
select trim(regexp_replace(regexp_substr('Hello world this is a test etc', '(([^ ]*)( |$)*){3}'), ' +', ' '))
from dual;
编辑:这变得很难看,但是在它周围包裹了一个 TRIM() 以摆脱尾随的 space (选择的最后一个单词之后的那个)。
我需要 select 字符串中的前 X 个单词,其中 x 可以是 0-100 之间的任意数字。是否有捷径可寻?我发现以下示例 select 字符串中的前 2 个单词:
select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','') as first_two
from dual
我如何 select 字符串中的前 X 个单词,其中 X 可以是 0-100 之间的数字?
这样就可以了,但可能有点不雅,将“2”替换为要查找的字数
select substr('this is a number of words',1,instr('this is a number of words',' ',1,2))
from dual
是否假设单词总是以 space
结尾选择前四个词:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s){4}).*', -- Change 4 to wanted number of words here!
''
)
from dual;
编辑
以上解决方案仅在单词由 恰好一个 白色 space 字符分隔时有效。如果单词由一个或多个白色 space 字符分隔,则 \s
必须扩展为 \s+
:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s+){4}).*', -- Change 4 to wanted number of words here!
''
)
from dual;
此方法取你想要的字数提取结果,然后将多个space减少为一个:
select trim(regexp_replace(regexp_substr('Hello world this is a test etc', '(([^ ]*)( |$)*){3}'), ' +', ' '))
from dual;
编辑:这变得很难看,但是在它周围包裹了一个 TRIM() 以摆脱尾随的 space (选择的最后一个单词之后的那个)。