Fórum Select a partir de um caracter específico #526956

27/07/2015

0

Boa tarde,

Estou precisando fazer uma manobra em um campo de uma tabela. Na tabela os dados estão da seguinte forma:

FRANCO, DANIELE CRISTINA
SILVA, IRACI DE PAIVA


Estou precisando fazer um update que tire o sobrenome do começo e jogue na frente do nome. Pesquisei e não achei nada a respeito, tentei com substring porém não deu certo.
Alguém poderia me ajudar?
Renan Lima

Renan Lima

Responder

Posts

27/07/2015

Jair N.

Boa Tarde, o seu problema é definir o que é sobrenome e onde é nome. Exemplo de nomes compostos e sobrenomes compostos, em ambos os casos tu terá que pegar por uma SUBSTRING, e para pegar esta última posição onde se encontra o espaço que separa entre estes, porém ainda no caso onde é que começa os sobrenomes?

Boa tarde,

Estou precisando fazer uma manobra em um campo de uma tabela. Na tabela os dados estão da seguinte forma:

FRANCO, DANIELE CRISTINA
SILVA, IRACI DE PAIVA


Estou precisando fazer um update que tire o sobrenome do começo e jogue na frente do nome. Pesquisei e não achei nada a respeito, tentei com substring porém não deu certo.
Alguém poderia me ajudar?
Responder

Gostei + 0

27/07/2015

Renan Lima

O banco de dados respeita a seguinte regra:

SOBRENOME, NOME

São sempre separados por vírgula e espaço.
Utilizando o SUBSTRING como ficaria, poderia me dar um exemplo?
Responder

Gostei + 0

27/07/2015

Jair N.

Boa Tarde, não sei se vai te ajudar, isso também por causa de um erro grave ao informar o sobrenome acrescido de agnome exemplo "junior, neto, filho etc."

Segue abaixo uma função de exemplo:

-- DROP FUNCTION fncstr_invert(VARCHAR(255));
CREATE OR REPLACE FUNCTION fncstr_invert(VARCHAR(255))
RETURNS VARCHAR(255)
AS
$BODY$
SELECT array_to_string(ARRAY (SELECT SUBSTRING($1,s.i,1) FROM generate_series(LENGTH($1),1,-1) AS s(i)),'');
$BODY$
LANGUAGE SQL IMMUTABLE STRICT;

-- DROP FUNCTION fncstr_sobrenome(VARCHAR(255));
CREATE OR REPLACE FUNCTION fncstr_sobrenome(VARCHAR(255))
RETURNS VARCHAR(255)
AS
$BODY$
SELECT fncstr_invert(SUBSTRING(fncstr_invert($1), 1, STRPOS(fncstr_invert($1) || ' ',' ') -1)) || ', '
|| fncstr_invert(SUBSTRING(fncstr_invert($1), STRPOS(fncstr_invert($1) || ' ',' ') +1));
$BODY$
LANGUAGE SQL IMMUTABLE STRICT;

SELECT fncstr_sobrenome('Meu Nome Sobrenome');
Responder

Gostei + 0

27/07/2015

Renan Lima

É que estamos importando a base de dados de um outro sistema para um cliente novo que utilizará o nosso sistema, aí o padrão adotado pelo sistema antigo foi esse.
Muito obrigado pela dica, vou tentar aqui e dou o feedback.
Responder

Gostei + 0

27/07/2015

Renan Lima

Consegui com o seguinte comando

update cliente set 
nome = split_part(nome,',',2)||' '||split_part(nome,',',1);



Obrigado pela ajuda!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar