none
BETWEEN COM DATA RRS feed

  • Pergunta

  • Olá,

     

    Estou com a seguinte Duvida:

     

    Tenho um relatório no Crystal Reports e nele usei a seguinte clausula:

     

    "SELECT Tbl_funcionario.Nome_func, Count(Tbl_solicitacao.Cod_solicitacao) AS Chamados_abertos
    FROM Tbl_solicitacao , Tbl_funcionario
    WHERE Tbl_solicitacao.Cod_func = Tbl_funcionario.Cod_func AND
                  Tbl_solicitacao.Data_Cadastro BETWEEN {?1_Data_Inicial} AND {?2_Data_final}
    GROUP BY Tbl_funcionario.Nome_func
    ORDER BY Count(Tbl_solicitacao.Cod_solicitacao) DESC, Nome_func"

    Está funcionando quase perfeito.

    Por exemplo,

    Se eu coloco a Data Inicial com a data 01/01/2012 e data final 03/01/2012 ele só me traz os valores da data 01/01/2012 e 02/01/2012.

    segunda-feira, 30 de janeiro de 2012 15:32

Respostas

Todas as Respostas

  • Não custa perguntar, mas tem algum dado com data do dia 03 e que satisfaça sua condição no where?
    segunda-feira, 30 de janeiro de 2012 15:39
  • Os campos do tipo data são completados com a hora "00:00:00", sendo assim, na sua pesquisa ficará entre o dia 01/01/2012 00:00:00 e 03/01/2012 00:00:00.

     

    Por isso ele só retorna datas até o primeiro segundo do dia 03/01

     

    Vc pode completar a data final com 23:59:59, ou adicionar 1 dia na data final.

     

    Abraços


    Ozimar Henrique
    http://ozimar.com

    Se a resposta lhe ajudou, favor marcar como útil.
    If the answer helped you, Please vote as helpful.
    • Sugerido como Resposta Ozimar Henrique segunda-feira, 30 de janeiro de 2012 15:44
    segunda-feira, 30 de janeiro de 2012 15:43
  • Complementando o Ozimar, você também tem a opção de truncar a data, retirando a hora:

    "SELECT Tbl_funcionario.Nome_func, Count(Tbl_solicitacao.Cod_solicitacao) AS Chamados_abertos
    FROM Tbl_solicitacao , Tbl_funcionario
    WHERE Tbl_solicitacao.Cod_func = Tbl_funcionario.Cod_func AND
                  convert (datetime, convert (varchar, Tbl_solicitacao.Data_Cadastro, 103), 103) BETWEEN {?1_Data_Inicial} AND {?2_Data_final}
    GROUP BY Tbl_funcionario.Nome_func
    ORDER BY Count(Tbl_solicitacao.Cod_solicitacao) DESC, Nome_func"

    No entanto você perderá desempenho por causa das conversões.


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    segunda-feira, 30 de janeiro de 2012 16:32
  • Outra forma para truncar:

    SELECT convert(datetime,CAST(getdate() as int), 103)


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    segunda-feira, 30 de janeiro de 2012 16:35
  • Boa Tarde,

    Truncar a data no WHERE é pouco performático. Sugiro complementar com o 23:59:59.999. É mais eficiente:

    DATEDIFF, CONVERT, SUBSTRING e funções sobre colunas na cláusula WHERE e JOINs
    http://gustavomaiaaguiar.wordpress.com/2011/07/03/datediff-convert-substring-e-funes-sobre-colunas-na-clusula-where-e-joins/

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 30 de janeiro de 2012 16:55
  • Jah que citaram performance, nao seria o caso de usar somente o convert para 103 DECLARE @TABLE TABLE (NOME VARCHAR(1000), DATA DATETIME) INSERT INTO @TABLE VALUES ('JUNIOR', '2012-01-01 00:00:00.000') INSERT INTO @TABLE VALUES ('JUNIOR', '2012-01-02 00:00:00.000') INSERT INTO @TABLE VALUES ('JUNIOR', '2012-01-03 10:30:59.000') SELECT * FROM @TABLE WHERE DATA BETWEEN convert(datetime,'2012-01-01',103) AND convert(datetime,'2012-01-03',103)
    segunda-feira, 30 de janeiro de 2012 17:13
  • PESSOAL, FOI MAIS SIMPLES DO QUE IMAGINEI.

     

    SOMENTE ADICIONEI  "+ 1" NO PARAMETRO DATA FINAL E FUNCIONOU NORMALMENTE.

    terça-feira, 31 de janeiro de 2012 12:48