Select a partir de um caracter específico
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?
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
Curtidas 0
Respostas
Jair N.
27/07/2015
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?
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?
GOSTEI 0
Renan Lima
27/07/2015
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?
SOBRENOME, NOME
São sempre separados por vírgula e espaço.
Utilizando o SUBSTRING como ficaria, poderia me dar um exemplo?
GOSTEI 0
Jair N.
27/07/2015
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');
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');
GOSTEI 0
Renan Lima
27/07/2015
É 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.
Muito obrigado pela dica, vou tentar aqui e dou o feedback.
GOSTEI 0
Renan Lima
27/07/2015
Consegui com o seguinte comando
Obrigado pela ajuda!
update cliente set nome = split_part(nome,',',2)||' '||split_part(nome,',',1);
Obrigado pela ajuda!
GOSTEI 0