Boa tarde pessoal,
estou com uma dúvida e gostaria de saber se alguém pode me ajudar, é o seguinte:
tenho em uma tabela uma coluna "NOME", onde se cadastra por exemplo "José Geraldo Silva".
Eu preciso transformar estes dados para uma nova tabela onde "José Geraldo Silva" deve constar em tres colunas diferentes, sendo elas "FIRST_NAME - José", "LAST_NAME - Silva", "MIDDLE_NAME - Geraldo" e não mais apenas na coluna "NOME - José Geraldo Silva".
grato...
Função de String
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 24 Jun 2008 9:32 am
- Localização: Uberlândia
- jessica.ff
- Rank: Programador Sênior
- Mensagens: 61
- Registrado em: Seg, 11 Jun 2007 2:28 pm
- Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.
é garantido que sempre terá no minimo 3 nomes ou que não estejam abreviados?
Pois você pode utilizar o substr e instr para pegar cada parte do nome por exemplo:
E depois você pega o final, mas o esquema é o mesmo!!!
A partir disso você consegue fazer verificação pra mais ou menos nomes
Pois você pode utilizar o substr e instr para pegar cada parte do nome por exemplo:
select substr('JOSÉ GERALDO SILVA',1,instr('JOSÉ GERALDO SILVA',' ')-1)
from dual
select substr('JOSÉ GERALDO SILVA', instr('JOSÉ GERALDO SILVA', ' ') + 1, instr(substr('JOSÉ GERALDO SILVA', instr('JOSÉ GERALDO SILVA', ' ') + 1, length('JOSÉ GERALDO SILVA')), ' ') - 1)
from dual
A partir disso você consegue fazer verificação pra mais ou menos nomes
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Pode usar a função SUBSTR pra pegar apenas um pedaço da string. E a função INSTR pra achar exatamente a posição do espaço em branco.
Algo assim:
Eu não testei, mas é usando esses comandos que você chega lá
Algo assim:
SELECT
SUBSTR( campo, 1, INSTR(campo,' ')-1 ) primeiro_nome
, SUBSTR( campo, INSTR(campo, ' '), INSTR(campo, ' ',2) segundo_nome
, SUBSTR( campo, INSTR(campo, ' ',2), INSTR(campo, ' ',3) terceiro_nome
FROM ...
- jessica.ff
- Rank: Programador Sênior
- Mensagens: 61
- Registrado em: Seg, 11 Jun 2007 2:28 pm
- Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.
Oi Thomas
Isso não funciona fui testar porque pensei, bah que topeira que eu sou ta bem mais simples que o meu, porem ele retorna o seguinte
Isso não funciona fui testar porque pensei, bah que topeira que eu sou ta bem mais simples que o meu, porem ele retorna o seguinte
select SUBSTR( 'JOSÉ GERALDO SILVA', 1, INSTR('JOSÉ GERALDO SILVA',' ')-1 ) as primeiro_nome
, SUBSTR( 'JOSÉ GERALDO SILVA', INSTR('JOSÉ GERALDO SILVA', ' '), INSTR('JOSÉ GERALDO SILVA', ' ',2)) as segundo_nome
, SUBSTR( 'JOSÉ GERALDO SILVA', INSTR('JOSÉ GERALDO SILVA', ' ',2), INSTR('JOSÉ GERALDO SILVA', ' ',3)) as terceiro_nome
from dual
PRIMEIRO_NOME SEGUNDO_NOME TERCEIRO_NOME
1 JOSÉ GERA GERA
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 24 Jun 2008 9:32 am
- Localização: Uberlândia
ola, você perguntou se sempre será no mínimo 3 nomes ou que não estejam abreviados.
A resposta é não, infelizmente não existe regra para estes nomes, eles podem estar nas mais variadas formas, isso inclui abreviações.
Desde já agradeço
se puderem continuar a me ajudar
obrigado
A resposta é não, infelizmente não existe regra para estes nomes, eles podem estar nas mais variadas formas, isso inclui abreviações.
Desde já agradeço
se puderem continuar a me ajudar
obrigado
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
jessica.ff escreveu:Oi Thomas
Isso não funciona fui testar porque pensei, bah que topeira que eu sou está bem mais simples que o meu, porem ele retorna o seguintePRIMEIRO_NOME SEGUNDO_NOME TERCEIRO_NOME 1 JOSÉ GERA GERA
Oi Jessica, claro! Meu SQL está errado! (fiz ele de cabeça e fiz errado). To sem ORACLE aqui pra testar, mas depois eu arrumo e posto aqui.
Aproveito pra deixar 2 links de coisas que podem ajudar:
Tokenizer:
http://glufke.net/oracle/viewtopic.php?t=753
Neste link tem a função ELEMENTO, que é exatamente o que você precisa:
(é o sétimo post do tópico)
http://glufke.net/oracle/viewtopic.php?t=1653
- jessica.ff
- Rank: Programador Sênior
- Mensagens: 61
- Registrado em: Seg, 11 Jun 2007 2:28 pm
- Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.
Então te aconselho primeiro a contar a qtde de espaços que tem isso vai te definir a qtde de nomes, por exemplo 2 espaços 3nomes. Porem José da Silva, ele vai considerar o da tb como um nome.
Uma forma pra você solucionar isso é pegar o primeiro nome, pegar o ultimo nome, e todo o resto é inserido no nome do meio
Espero ter ajudado
Uma forma pra você solucionar isso é pegar o primeiro nome, pegar o ultimo nome, e todo o resto é inserido no nome do meio
Espero ter ajudado
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 24 Jun 2008 9:32 am
- Localização: Uberlândia
desculpe jessica, mas tentei por aqui e não obtive muito sucesso, é que estou começando com pl/sql, se você puder continuar me ajudando fico grato.
um abraço
obrigado
um abraço
obrigado
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
Veja se te ajuda...
DECLARE
VNOME VARCHAR2(50):='FILISBINO SICRANO MARCULINO';
VPOS NUMBER :=0;
BEGIN
--
FOR I IN 1.. LENGTH(VNOME) LOOP
IF SUBSTR(VNOME,I,1) = ' ' THEN
VPOS := I;
END IF;
END LOOP;
--
DBMS_OUTPUT.put_line( 'FIRST_NAME: '||SUBSTR(VNOME,1,INSTR(VNOME,' ')-1) );
DBMS_OUTPUT.put_line( 'MIDLE_NAME: '||SUBSTR(VNOME,INSTR(VNOME,' ')+1, VPOS-INSTR(VNOME,' ')-1) );
DBMS_OUTPUT.put_line( 'LAST_NAME: ' ||SUBSTR(VNOME,VPOS+1) );
--
END;
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 24 Jun 2008 9:32 am
- Localização: Uberlândia
Obrigado a todos.
Resolvi o meu problema utilizando o código do joaogarcia.
Valeu pela força.
Abraços!
Resolvi o meu problema utilizando o código do joaogarcia.
Valeu pela força.
Abraços!
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Link interessante:
Função que abrevia o nome p/ caber em X caracteres.
http://glufke.net/oracle/viewtopic.php?t=3341
Função que abrevia o nome p/ caber em X caracteres.
http://glufke.net/oracle/viewtopic.php?t=3341
-
- Rank: Estagiário Pleno
- Mensagens: 3
- Registrado em: Qui, 26 Ago 2010 3:43 pm
- Localização: Belo Horizonte - MG
Recuperando os nomes separadamente:
select SUBSTR( 'JOSÉ GERALDO SILVA', 1, INSTR( 'JOSÉ GERALDO SILVA',' ')-1 ) as primeiro_nome
, substr( 'JOSÉ GERALDO SILVA', instr( 'JOSÉ GERALDO SILVA', ' ') + 1, instr(substr( 'JOSÉ GERALDO SILVA', instr( 'JOSÉ GERALDO SILVA', ' ') + 1, length( 'JOSÉ GERALDO SILVA')), ' ') - 1) as segundo_nome
, substr( 'JOSÉ GERALDO SILVA', INSTR( 'JOSÉ GERALDO SILVA', ' ', -1)) as terceiro_nome
from dual
PRIMEIRO_NOME | SEGUNDO_NOME | TERCEIRO_NOME
JOSÉ |GERALDO | SILVA
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante