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
Skype: gersonvjunior
http://www.diaadiaoracle.com.br/


Em 16 de agosto de 2010 14:03, Eduardo Schurtz
<eduardo.schu...@gmail.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 <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<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<leandro_valiengo%40yahoo.com.br>
> <leandro_valiengo%40yahoo.com.br>
> > >
> > Para: oracle_br@yahoogrupos.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]

Responder a