Fórum Ajuda para manipular string #349749
27/11/2007
0
Eu tenho um campo ENDERECO aonde eu preciso ´quebrar´ esse endereço em número e complemento.
Acontece que não estou conseguindo.
Por exemplo:
Endereço: Rua Euclides de Castro 141 sala 01
O que tenho que pegar é colocar nas variáveis somente os valores do número e do complemento.
vlNumero: 141
vlComplemento: sala 01
Alguém pode me ajudar?
É urgente....
Marcos.gandin
Curtir tópico
+ 0Posts
27/11/2007
Daykas
No seu caso, você tem tamanhos variados para cada endereço. Isto dificulta porque precisaria ter posições fixas para poder atribuir os valores do número e do complemento para as variáveis.
Sem chance!
Gostei + 0
27/11/2007
Marcos.gandin
Na nossa base de dados tem o campo Endereco com o endereço completo (Rua Euclides de Castro 141 sala 01) e na base dos correios tem o campo Nome com o nome da rua (Euclides Castro).
O que me foi sugerido é pegar o ultimo nome (Castro) da base dos correios e comparar com a nossa. Quando achar a string (Castro), deve-se descartar tudo o quer tiver à esquerda (Euclides Castro) e gravar num campo que foi criado na base o valor no numero (141) e o complemento (sala 01).
Pegar o ultimo nome eu já consegui...o que eu não to conseguindo é descartar a parte à esquerda e quebrar o restante da string em 2 campos.
Será que consegui explicar ?
Gostei + 0
27/11/2007
Ferreia2
Gostei + 0
27/11/2007
Comodelphi
Imagine se existir rua: Fulano Castro, Beltrano Castro, Ze Castro. Será que essa solução da certo?
Qual o banco você usa?
Gostei + 0
27/11/2007
Marcos.gandin
Mas será que não existe nenhuma solução pra esse caso? :(
Gostei + 0
27/11/2007
Comodelphi
abcs.
Gostei + 0
27/11/2007
Marcos.gandin
Te agradeço muito se puderes me ajudar.
É que estou entrando agora numa empresa e eles me pediram pra fazer essa verificação na base pois temos que atualizar nosso banco e estou ´penando´ justamente nessa parte.
Mais uma vez obrigado.
Abraço...
Gostei + 0
28/11/2007
Marcos.gandin
Abraços....
Gostei + 0
28/11/2007
Comodelphi
select regexp_replace(´Rua Euclides de Castro 141 sala 01´, ´(?:[A-Z,a-z]{1,})([ , ]{1,})([A-Z,a-z]{1,})´, ´´, ´g´);
resultado esperado: substituir a parte inicio da string até que seja encontrado um número, preservando a string a partir desse ponto:
Gostei + 0
28/11/2007
Marcos.gandin
Outra coisa...e se a rua for no seguinte formato:
Rua 7 de Setembro 93 E
Coloquei na query e ela me retornou: [b:7ce347e71b]Rua 7 93 E[/b:7ce347e71b]
Teríamos um problema aí... :(
Gostei + 0
28/11/2007
Comodelphi
CREATE OR REPLACE FUNCTION fn_evalexprendereco(aexpr character varying)
RETURNS character varying AS
$BODY$
declare
expr1 varchar(255);
begin
expr1 := ´´;
if upper(aexpr) ~ ´((RUA|AVENIDA|AV|AV.)(([0-9]{1,})|([ , ]{1,}[0-9]{1,}))([ , ]{1,})([A-Z,a-z]{1,}))´
then
expr1 := regexp_replace(aexpr, ´((RUA|AVENIDA|AV|AV.)(([0-9]{1,})|([ , ]{1,}[0-9]{1,}))([ , ]{1,})([A-Z,a-z]{1,}))´, ´´, ´i´);
expr1 := regexp_replace(trim(both ´ ´ from expr1), ´^([A-Z,a-z]){1,}´, ´´, ´g´);
else
expr1 := regexp_replace(aexpr, ´(?:[A-Z,a-z]{1,})([ , ]{1,})([A-Z,a-z]{1,})´, ´´, ´g´);
end if;
expr1 := trim(both ´ ´ from expr1);
return expr1;
end;
$BODY$
LANGUAGE ´plpgsql´ VOLATILE;
ex.: como usar.
select fn_evalexprendereco(´Rua 7 de Setembro 93 E ´);
select fn_evalexprendereco(´Rua Euclides de Castro 141 sala 01´);
select fn_evalexprendereco(cpo_endreco)
from cadcli;
Gostei + 0
28/11/2007
Marcos.gandin
É que aí eu iria passar uma string pra função e ela me retornaria o resultado.
Mas valeu mesmo assim.
Flw
Gostei + 0
28/11/2007
Comodelphi
Gostei + 0
28/11/2007
Comodelphi
Gostei + 0
28/11/2007
Comodelphi
function evalexprendereco(aexpr: string): string; begin with TZReadOnlyQuery.Create(nil) do begin Connection := dbConnection; SQL.Text := ´select fn_evalexprendereco(:aexpr) as aexpr´; Open; Result := FieldByName(´aexpr´).AsString; Free; end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)