在oracle sql中按空格拆分具有两个或三个单词的列

在oracle sql中按空格拆分具有两个或三个单词的列,sql,regex,oracle,split,Sql,Regex,Oracle,Split,我的表中有一个遗留列,它将名称和姓氏值存储在一起。 例如:Mike Muyra或John Kutgira 我需要用空格分隔列 结果必须是这样的(最后一个单词是姓,其他单词是名) 我已经研究了两个小时了。(REGEXP\u SUBSTR看起来很酷),但我找不到解决方案。您可以使用正则表达式。但是,由于该规则涉及最后一个空格,因此常规字符串操作也可以: select trim(substr(legacy, 1 - instr(reverse(legacy), ' '))) as surname,

我的表中有一个遗留列,它将名称和姓氏值存储在一起。 例如:
Mike Muyra
John Kutgira

我需要用空格分隔列

结果必须是这样的(最后一个单词是姓,其他单词是名)


我已经研究了两个小时了。(REGEXP\u SUBSTR看起来很酷),但我找不到解决方案。

您可以使用正则表达式。但是,由于该规则涉及最后一个空格,因此常规字符串操作也可以:

select trim(substr(legacy, 1 - instr(reverse(legacy), ' '))) as surname,
       trim(substr(legacy, 1, length(legacy) - instr(reverse(legacy), ' '))) as restname

您可能希望将它们包装在“%”之类的旧版
中,以确保它们有一个空格。

您可以使用正则表达式。但是,由于该规则涉及最后一个空格,因此常规字符串操作也可以:

select trim(substr(legacy, 1 - instr(reverse(legacy), ' '))) as surname,
       trim(substr(legacy, 1, length(legacy) - instr(reverse(legacy), ' '))) as restname

您可能希望将这些字符包装在“%”之类的
旧大小写中,以确保它们有一个空格。

尝试找出空格(“”)字符的最后一个索引,然后使用子字符串(我猜第一部分和最后一部分使用两次)来获得所需的内容


下面是部分的最后一个索引的示例。

尝试找出空格(“”)字符的最后一个索引,然后使用子字符串(我猜第一部分和最后一部分使用两次)来获得所需内容

select trim(substr(:p_str, 1, instr(:p_str, ' ', -1)-1)) first_name,
       trim(substr(:p_str, instr(:p_str, ' ', -1)+1)) surname 
  from dual;

这是零件的最后一个索引。

PS:也有,你也可以在那里找到一些帮助。PS:也有,你也可以在那里找到一些帮助。非常好用。只需为前后空白添加TRIM()。一切都好。谢谢你。只需为前后空白添加TRIM()。一切都好。谢谢你的回答当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。你的答案当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。
select trim(substr(:p_str, 1, instr(:p_str, ' ', -1)-1)) first_name,
       trim(substr(:p_str, instr(:p_str, ' ', -1)+1)) surname 
  from dual;