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]