Eu faria assim mesmo. Pegava o primeiro e ultimo e depois substituia por ''.
Alguém já viu um nome do tipo: Sandoval Silva e Silva? Nesse caso, ia dar problema. Então, talvez o ideal fosse pegar o primeiro nome até o primeiro ' '. Buscar tudo até o ultimo espaço para o nome do meio. E depois pegar o que sobrou como último nome. On 16-08-2010 14:05, Gerson Junior wrote: > > > A moda antiga versão 2: > > declare > v_nome varchar2(1000) := 'GERSON S DE V JUNIOR'; > v_first varchar2(1000); > v_middle varchar2(1000); > v_last varchar2(1000); > begin > v_first := substr(v_nome, 1, instr(v_nome, ' ', 1, 1)-1); > v_last := substr(v_nome, instr(v_nome, ' ', -1, 1)+1); > v_middle := trim(replace(replace(v_nome, v_first, ''), v_last, '')); > dbms_output.put_line('First: '||v_first||' Middle: '||v_middle||' Last: > '||v_last); > end; > > Gerson S. de Vasconcelos Júnior > OCA DBA - Oracle Certified Associate > Fone: (81) 9816-0236 > Msn: gerson.vasconce...@gmail.com <mailto:gerson.vasconcelos%40gmail.com> > Skype: gersonvjunior > http://www.diaadiaoracle.com.br/ > > Em 16 de agosto de 2010 14:03, Eduardo Schurtz > <eduardo.schu...@gmail.com <mailto:eduardo.schurtz%40gmail.com>>escreveu: > > > > > > > Se não for 10g, à moda antiga: > > > > declare > > l_nome_completo varchar2(200) := 'Paulo José Farias Neto'; > > l_nome varchar2(100); > > l_nome_meio varchar2(100); > > l_sobrenome varchar2(100); > > -- > > begin > > l_nome := substr(l_nome_completo, 1, instr(l_nome_completo, ' ') - 1); > > l_nome_meio := substr(l_nome_completo, instr(l_nome_completo, ' ') + 1, > > (instr(l_nome_completo, ' ', -1) - instr(l_nome_completo, ' ')) - 1); > > l_sobrenome := substr(l_nome_completo, instr(l_nome_completo, ' ', -1) + > > 1); > > -- > > dbms_output.put_line('Nome: ' || l_nome); > > dbms_output.put_line('Nome: ' || l_nome_meio); > > dbms_output.put_line('Nome: ' || l_sobrenome); > > end; > > > > Abs > > > > __________________________ > > *Eduardo Schurtz* > > Oracle E-Business Consultant > > ✉ eduardo.schu...@gmail.com <mailto:eduardo.schurtz%40gmail.com> > <eduardo.schurtz%40gmail.com> > > [image: LinkedIn] <http://br.linkedin.com/in/eduardoschurtz>[image: > > Twitter]<http://twitter.com/eduardo_oracle> > > > > 2010/8/16 Marcus Pavan <marcus_...@yahoo.com.br > <mailto:marcus_apf%40yahoo.com.br><marcus_apf%40yahoo.com.br> > > > > > > > > > > > > > > > > Leandro, boa tarde. > > > > > > Você conseguirá fazer isto via Regular Expression (Oracle 10g ou > > superior). > > > > > > SELECT REGEXP_SUBSTR('JOSE ANTONIO DA SILVA JR.', '^[A-Z]+') AS > > first_name > > > ,REGEXP_SUBSTR('JOSE ANTONIO DA SILVA JR.', ' {1,}[A-Z]+ ') AS > > middle_name > > > ,SUBSTR('JOSE ANTONIO DA SILVA JR.', REGEXP_INSTR('JOSE ANTONIO DA > SILVA > > > JR.', ' ', 1, 2), LENGTH('JOSE ANTONIO DA SILVA JR.') - 1) AS last_name > > > FROM dual; > > > > > > Atenciosamente, > > > > > > Marcus Pavan. > > > > > > ________________________________ > > > De: Leandro Valiengo <leandro_valie...@yahoo.com.br > <mailto:leandro_valiengo%40yahoo.com.br><leandro_valiengo%40yahoo.com.br> > > <leandro_valiengo%40yahoo.com.br> > > > > > > > Para: oracle_br@yahoogrupos.com.br > <mailto:oracle_br%40yahoogrupos.com.br> > <oracle_br%40yahoogrupos.com.br><oracle_br% > > 40yahoogrupos.com.br> > > > > > Enviadas: Sábado, 14 de Agosto de 2010 15:16:16 > > > Assunto: [oracle_br] "Dividir" nome > > > > > > > > > Oi grupo, > > > > > > Boa tarde. > > > > > > Estou quebrando minha cabeca aqui para "dividir" um nome. > > > > > > Ex: > > > > > > O campo NM_CLIENTE, por exemplo, contem: Luiz Paulo Costa Silva > (pode ter > > 2 > > > > > > e n nomes) > > > > > > Preciso de um comando que faça: > > > > > > FIRST_NAME: LUIZ > > > LAST_NAME: SILVA > > > MIDDLE_NAME: PAULO COSTA > > > > > > Para conseguir o primeiro nome é tranquilo, uso o INSTR para procurar o > > > primeiro espaco ' ' e depois coloco o -1. Ai recupero o primeiro nome. > > > > > > Para o resto tá complicado. Dei uma olhada no portal e não > encontrei nada > > a > > > > > > respeito. Desde já agradeco. > > > > > > Att. > > > > > > Leandro > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > >