[firebase-br] Dúvida com Between

Carlos Wilson cwfsa1 em gmail.com
Sex Dez 19 08:45:30 -03 2008


Pessoal,
    Muito esclarecedoras as respostas de voces, mas já tá resolvido o 
problema, basta colocar o sinal de til (~) após a ultima expressão.
Como não serão valores fixos e sim cada usuário digitará o intervalo que 
lhe convier eu não tenho como pegar  ele digitou e colocar a próxima 
letra, acrescento o til e roda de boa.

Obrigado a todos

Carlos Wilson.

Sandro Souza escreveu:
> Bom dia/tarde Mário.
>
> Apenas complementando sua excelente resposta.
>
> Não é um bug, mas sim apenas entender como se comporta o operador BETWEEN.
>
> A sintaxe básica do BETWEEN é a seguinte:
>
> Valor BETWEEN Início AND Fim
>
> Que é traduzido para:
>
> (Valor >= Início) AND (Valor <= Fim)
>
> Entendendo essa lógica, a seguinte condição:
>
> Nome BETWEEN 'A' AND 'C'
>
> É traduzida para:
>
> (Nome >= 'A') and (Nome <= 'C')
>
> Ou seja, na prática, retornará todos os nomes iniciados por 'A' e por 'B', e
> também o nome que for APENAS a letra 'C', ou seja, o nome CARLOS não seria
> retornado porque 'CARLOS' > 'C' e não <= 'C'.
>
> Comparando apenas o primeiro caractere, como você fez, funciona
> perfeitamente, como perfeita foi sua resposta.
>
> Em questão de performance, implica no processamento de cada valor
> (SUBSTR(NOME,1,1)) para poder então comparar com 'A' e 'C'. A não ser, é
> claro, que você já esteja utilizando uma versão mais nova do Firebird que já
> suporte a criação de índices baseados em expressões, e não apenas em campos
> puros.
>
> Então, se você criar um índice sobre a expressão SUBSTR(NOME,1,1), você vai
> ter a melhor performance possível.
>
> Se sua versão de Firebird ainda não suporta esse recurso, você poderia
> comparar o nome da seguinte forma:
>
> (Nome >= 'A') and (Nome < 'D')
>
> Aí sim retornaria todos os nomes iniciados por A, B e C, mas apenas no caso
> dos nomes estarem todos em maiúsculo (ou todos em minúsculo e comparando com
> 'a' e 'd').
>
> Espero ter ajudado mais que atrapalhado.
>
> 2008/12/18 Mário Reis <mariodosreyx em gmail.com>
>
>   
>> Sim a solução parece simples.
>> Porém pode tratar-se de um BUG porque se
>> inclui "A" (inicio do conjunto) então lógico seria incluir igualmente "C"
>> (fim do conjunto)
>> Aliás, estou usando como "Tira Teimas" um sistema estável e muito
>> experimentado
>> DB2-400 for AS400 e confirmo:
>>
>> select NOME from Titulares
>> where substr(NOME, 1, 1) between 'A' and 'C'
>> order by NOME
>>
>> o meu universo inclui o conjunto de todos os
>> Nomes começados por «A» até todos os
>> Nomes começados por «C» inclusivé
>>
>> Mas atenção!!!
>> Com o Firebird o resultado é o mesmo.
>>
>> Use a cláusula  SUBSTR(NOME , 1,1) e, pela certa vai obter o resultado
>> desejado.
>>
>> Mário Reis
>>
>> 2008/12/18 Denis José <denisjosealmeida em gmail.com>
>>
>>     
>>> coloque between 'A' and 'D'
>>>
>>> 2008/12/16 Alexandre Gonçalves <info em cacula.ind.br>
>>>
>>>       
>>>> Boa Tarde, Carlos!
>>>>
>>>> Tente fazer assim:
>>>>
>>>> where nome between 'A' and 'C'
>>>> and nome starting with 'C'
>>>>
>>>> Abraço.
>>>>
>>>> Alexandre A. Gonçalves
>>>> Dracena - SP
>>>>
>>>> Carlos Wilson escreveu:
>>>>
>>>>         
>>>>> Boa tarde,
>>>>>
>>>>> to precisando fazer uma consulta que me retorne por exemplo os nomes
>>>>>           
>> que
>>     
>>>>> comecem com a A até C.
>>>>> Fiz assim:
>>>>>  where nome between 'A' and 'C'
>>>>> mas me retorna apenas os nomes com A e B os nomes com C ficam
>>>>>           
>> excluidos.
>>     
>>>>> o Between funciona batata com campos númericos e datas mas com strings
>>>>> parece que tem um problema.
>>>>> Alguem tem alguma dica de como se faz essa consulta? Uso a versão 1.5.
>>>>>
>>>>> Grato.
>>>>>
>>>>> Carlos Wilson
>>>>>
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>>
>>>>>           
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>         
>>>
>>> --
>>> denisjose
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>       
>>
>> --
>>
>> C/Melhores cumprimentos
>> Mário Agostinho Reis
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>     
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   





Mais detalhes sobre a lista de discussão lista