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]
>
> 

Responder a