Tej*_*eja 1 sql oracle oracle11g
如何在空格分隔符的句子或一组字符串中获取第n个单词?
对不起要求的变化.谢谢.
通过使用instr.
select substr(help, 1, instr(help,' ') - 1)
from ( select 'hello my name is...' as help
from dual )
Run Code Online (Sandbox Code Playgroud)
instr(help,' ')返回第一个出现的第一个参数的位置索引,包括您要搜索的字符串.即' '字符串'hello my name is...' 加空格中的第一次出现.
substr(help, 1, instr(help,' ') - 1)然后将输入字符串从第一个字符带到指示的索引instr(....然后我删除一个,以便不包括空间..
对于第n次出现,只需稍微改变一下:
instr(help,' ',1,n)是第' '一个字符的第n次出现.然后你需要找到下一个索引的位置索引instr(help,' ',1,n + 1),最后找出它们之间的差异,这样你才能知道你的距离substr(....当你正在寻找第n个时,当n为1时,这就会崩溃,你必须处理它,就像这样:
select substr( help
, decode( n
, 1, 1
, instr(help, ' ', 1, n - 1) + 1
)
, decode( &1
, 1, instr(help, ' ', 1, n ) - 1
, instr(help, ' ', 1, n) - instr(help, ' ', 1, n - 1) - 1
)
)
from ( select 'hello my name is...' as help
from dual )
Run Code Online (Sandbox Code Playgroud)
这也将在n处分解.正如你所看到的那样,这很荒谬,所以你可能会考虑使用它regular expressions
select regexp_substr(help, '[^[:space:]]+', 1, n )
from ( select 'hello my name is...' as help
from dual )
Run Code Online (Sandbox Code Playgroud)
试试这个.获得第四个单词的一个例子:
select names from (
select
regexp_substr('I want my two dollars','[^ ]+', 1, level) as names,
rownum as nth
from dual
connect by regexp_substr('I want my two dollars', '[^ ]+', 1, level) is not null
)
where nth = 4;
Run Code Online (Sandbox Code Playgroud)
内部查询将空格分隔的字符串转换为一组行.外部查询从集合中获取第n个项目.