【问题标题】:Split column which have two or three word by space in oracle sql在oracle sql中按空格分割有两个或三个单词的列
【发布时间】:2015-10-10 15:46:36
【问题描述】:

我的表中有一个旧列,它将姓名和姓氏值一起存储。 例如:Mike Huge MuyraJohn Kutgira

我需要按空格分割列。

结果一定是这样(最后一个字是姓,其他是名字

Name : Mike Huge,  Surname : Muyra
Name : John,       Surname : Kutgira

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

【问题讨论】:

    标签: sql regex oracle split


    【解决方案1】:

    您可以为此使用正则表达式。但是,由于该规则涉及 last 空间,因此常规字符串操作可能没问题:

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

    您可能希望将它们包装在 case legacy like '% %' 中,以确保它们有一个空格。

    【讨论】:

    • 完美运行。只需在空格前后添加 TRIM() 即可。万事如意。谢谢
    【解决方案2】:

    尝试找出空格 (' ') 字符的最后一个索引,然后使用子字符串(我猜第一部分和最后一部分是两次)来得到你想要的。

    这里是一个answer,用于部分的最后一个索引。

    【讨论】:

    【解决方案3】:
    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;
    

    【讨论】:

    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多