Re: [firebase-br] Como montar a string de endereço?

eduardo eduardo em icontroller.com.br
Seg Maio 30 17:20:23 -03 2005


Oi David

Se todos os campos, quando vazios, assumirem NULL, então você pode usar 
assim:

SELECT COALESCE(TIPOLOGRADOURO, '')||
COALESCE(' '||NOMELOGRADOURO, ' ')||
COALESCE(', '||NUMERO, '')||
COALESCE(' - '||COMPLEMENTO, '') FROM TABELA

Isto para um formato 'Rua Getúlio Vargas, 1092 - casa'

observe que ' '||NULL retorna NULL então valerá o segundo parâmetro do 
COALESCE

Se os valores vazios estiverem como '', então você terá que utilizar uma 
estrutura CASE

TIPOLOGRADOURO||
CASE WHEN NOMELOGRADOURO > '' THEN ' '||NOMELOGRADOURO ELSE '' END||
CASE WHEN NUMERO > '' THEN ', '||NUMERO ELSE '' END||
CASE WHEN COMPLEMENTO > '' THEN ' - '||COMPLEMENTO ELSE '' END
AS ENDERECO_FORMATADO

Se você não tiver certeza se NULL ou não terá que utilizar um misto 
entre os dois, tipo

CASE WHEN COALESCE(NOMELOGRADOURO,'') > '' THEN ...

Obs. Quanto menos funções utilizar no SELECT, melhor a performance, 
embora muitas vezes não seja siginificativa em resultsets pequenos a médios.

[]s Eduardo


dvdmengarda em hotmail.com wrote:
> Olá!
> 
> Com base na tabela de clientes, preciso apresentar uma coluna com logradouro, tipo de logradouro, número e complemento. A questão é como prever o uso da ', ' para separá-los.
> 
> Se fosse via programação normal, eu usaria:
> 
> cEnd := c.endereco;
> if c.tipologradouro <> '' then cEnd := cEnd + ', ' + c.tipologradouro;
> if c.numero <> '' then cEnd := cEnd + ', ' + c.numero;
> if c.complemento <> '' then cEnd := cEnd + ', ' + c.complemento;
> 
> Como posso transportar isso para uma query? É possível?
> 
> 
> Grato!
> 
> 
> 
> David
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista