如何使用空格分隔符获取任何通用单词或句子中的第n个字符串

Tej*_*eja 1 sql oracle oracle11g

如何在空格分隔符的句子或一组字符串中获取第n个单词?

对不起要求的变化.谢谢.

Ben*_*Ben 7

通过使用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)


Dan*_* A. 5

试试这个.获得第四个单词的一个例子:

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个项目.