Em 11 de junho de 2012 09:24, Adenilton Batista da Silva
<[email protected]> escreveu:
> Usando o seu exemplo...
>
> Obter o Nome:
> SELECT SUBSTR('Fulano da silva - Av. sete de setembro', 1, POSITION('Av.' in 
> 'Fulano da silva - Av. sete de setembro') -3);
>
> Obter o endereço:
> SELECT SUBSTR('Fulano da silva - Av. sete de setembro', POSITION('Av.' in 
> 'Fulano da silva - Av. sete de setembro'), LENGTH('Fulano da silva - Av. sete 
> de setembro'))


A consulta abaixo é um exemplo que pode ser um ponto de partida a ser
utilizado em um UPDATE, mas não é uma solução ideal, pode no máximo
fazer parte de uma solução um pouco mais genérica. Como o Dutra falou
o pressuposto é frágil, tudo dependerá das regras do seu negócio e dos
dados que possui. A "jogada" está nas expressões regulares.

---
SELECT
  endereco,
  CASE
    WHEN upper(endereco) ~ '^(R|RUA)[^0-9A-Z]? '      THEN
ARRAY['RUA', regexp_replace(upper(endereco),'^(R|RUA)[^0-9A-Z]? ','')]
    WHEN upper(endereco) ~ '^(AV|AVENIDA)[^0-9A-Z]? ' THEN ARRAY['AV',
regexp_replace(upper(endereco),'^(AV|AVENIDA)[^0-9A-Z]? ','')]
    ELSE ARRAY['OUTROS',upper(endereco)]
END as resultado
FROM sua_tabela
WHERE upper(endereco) ~ '^((R|AV)|(RUA|AVENIDA))[^0-9A-Z]? '
---

[]s
--
Dickson S. Guedes
mail/xmpp: [email protected] - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a