none
SQL Server erro no between RRS feed

  • Pergunta

  • Olá pessoal...

    Tenho um select entre datas do tipo datetime que só retorno os dados quanto coloco o parâmetro no mesmo mês, se eu colocar a busca com mês diferente não retorna nada ex:

    AND CONVERT(varchar(10), at.DataCadastro, 103) >= '01/05/2012' 
    AND CONVERT(varchar(10), at.DataCadastro, 103) <= '03/05/2012' (mesmo mês)Aqui retorna normal, mas assim

    AND CONVERT(varchar(10), at.DataCadastro, 103) >= '15/04/2012' 
    AND CONVERT(varchar(10), at.DataCadastro, 103) <= '03/05/2012'

    (mês diferente) Aqui não retorna nada, mas os dados estão entre o período passado. Já tentei com between e dá a mesma coisa.


    Alexander

    quinta-feira, 10 de maio de 2012 12:31

Respostas

  • Alexander,

    Acredito

    que é porque você esta comparando duas strings, logo 15 é maior que 03,

    para funcionar você tem que comparar duas datas.

    Ex:

    CREATE TABLE #TESTE(
    	DATA DATETIME
    )
    
    INSERT INTO #TESTE VALUES ('20120510'),('20120420'),('20120502'),('20120501')
    
    SELECT DATA FROM #TESTE
    WHERE CONVERT(VARCHAR(10), DATA, 103) >= '15/04/2012' 
     AND CONVERT(VARCHAR(10), DATA, 103) <= '03/05/2012'
    
    SET DATEFORMAT dmy
    SELECT DATA FROM #TESTE
    WHERE DATA >= '15/04/2012' 
    AND DATA <= '03/05/2012'


    Att.
    Lukas Baldan

    • Marcado como Resposta Alexander Leão quinta-feira, 10 de maio de 2012 13:11
    quinta-feira, 10 de maio de 2012 12:46

Todas as Respostas

  • Deve ser erro do formato da data, no início da sua query tente colocar isso:

    SET DATEFORMAT dmy

    Espero ter ajudado, abraços!


    thiagokoelho

    quinta-feira, 10 de maio de 2012 12:37
  • Thiago,

    Não deu certo, continua do mesmo jeito.


    Alexander

    quinta-feira, 10 de maio de 2012 12:44
  • Alexander,

    Acredito

    que é porque você esta comparando duas strings, logo 15 é maior que 03,

    para funcionar você tem que comparar duas datas.

    Ex:

    CREATE TABLE #TESTE(
    	DATA DATETIME
    )
    
    INSERT INTO #TESTE VALUES ('20120510'),('20120420'),('20120502'),('20120501')
    
    SELECT DATA FROM #TESTE
    WHERE CONVERT(VARCHAR(10), DATA, 103) >= '15/04/2012' 
     AND CONVERT(VARCHAR(10), DATA, 103) <= '03/05/2012'
    
    SET DATEFORMAT dmy
    SELECT DATA FROM #TESTE
    WHERE DATA >= '15/04/2012' 
    AND DATA <= '03/05/2012'


    Att.
    Lukas Baldan

    • Marcado como Resposta Alexander Leão quinta-feira, 10 de maio de 2012 13:11
    quinta-feira, 10 de maio de 2012 12:46
  • Lukas, 

    É verdade, mas como meu campo é datetime eu converto pra pegar somente a data e não a hora. Coloquei no lugar do varchar o tipo date. ficou assim:

    AND CONVERT(date, at.DataCadastro, 103) >= '01/04/2012' 
    AND CONVERT(date, at.DataCadastro, 103) <= '05/05/2012'

    Funcionou. Muito obrigado.


    Alexander

    quinta-feira, 10 de maio de 2012 13:11