none
Problema com Between RRS feed

  • Pergunta

  • Olá, estou com o problema na minha expressão, sendo ela:

    fatVencimento BETWEEN ISNULL(@vencimentoDe, fatVencimento) AND ISNULL(@vencimentoA, fatVencimento)

    com essa expressão na where ele oculta TODOS os fatVencimentos que sejam NULOS

    ...
    Ai vc me pergunta, não era isso oq tinha que fazer?

    A resposta é DEPENDE, se os parâmetros viessem com valores, a resposta é SIM, pois ele buscaria apenas vencimento entre aqueles valores descartando os NULOS... Porém e se os parâmetros viessem NULOS? Era pra ele mostrar TODOS os registros independente de seu vencimento ser nulo ou não, e é exatamente aqui que acontece oq eu não quero, ele oculta todos os vencimentos NULOS.

    Parece que ele não aceita uma comparação do tipo NULL BETWEEN NULL AND NULL


    Alguém poderia me ajudar?
    sexta-feira, 18 de janeiro de 2008 14:21

Respostas

  • R3N4N,

    Se você quiser retornar tantos os valores nulos como também os não nulos (conforme pergunta do Junior Galvão), você pode utilizar a sintaxe abaixo:


    WHERE (fatVencimento > = @vencimentoDe OR @vencimentoDe is null)
    AND      (
    fatVencimento < = @vencimentoA OR @vencimentoA is null)

    Inté

    sexta-feira, 18 de janeiro de 2008 19:17

Todas as Respostas

  • R3N4N,

     

    Quando se utiliza o operador AND é necessário que todas as condições existentes na claúsula where sejam verdadeiras para que o SQL Server retorno o conjunto de valores desejado.

     

    Em relação aos valores Nulos o SQL Server entende também que NULL representa um tipo de valor, por isso muitos vezes será desconsiderado os valores desejados.

     

    Agora a minha dúvida é a seguinte você deseja retornar tanto os valores nulos como também os não nulos?

     

    sexta-feira, 18 de janeiro de 2008 15:32
  • R3N4N,

    Se você quiser retornar tantos os valores nulos como também os não nulos (conforme pergunta do Junior Galvão), você pode utilizar a sintaxe abaixo:


    WHERE (fatVencimento > = @vencimentoDe OR @vencimentoDe is null)
    AND      (
    fatVencimento < = @vencimentoA OR @vencimentoA is null)

    Inté

    sexta-feira, 18 de janeiro de 2008 19:17