none
intervalo de datas RRS feed

  • Pergunta

  • Olá,

    eu quero fazer a soma de consumo de 12 meses em uma tabela de consumos que tem um campo datetime mesAno e um campo inteiro de consumos.

    eu pego a data atual e diminuo 12 meses para pegar o intervalo, mas aí eu tenho que verificar manualmente se a conta deu zero ou negativo para diminuir o valor do ano... e isto está meio trabalhoso...

    existe algum método ou atributo que facilite esta operação no tipo datetime, ou de alguma outra forma?

    obrigado.

            public void mediaConsumo12meses(int idequipamento, Label media12meses)
            {
                DateTime mes = DateTime.Today;
                int soma = 0;
                int media = 0;
    
                Conexao = new SqlConnection(StrConexao.ConnectionString);
                Conexao.Open();
                DateTime.Now.
                Comando = new SqlCommand("SELECT mesAno, consumo FROM Consumos WHERE IDEquipamento = " + idequipamento + " AND mesAno BETWEEN " + mes.Subtract(0/12/0000) + ", " + mes + "", Conexao);
    
                SqlDataReader readerconsumo = Comando.ExecuteReader();
                readerconsumo.Read();
                
                for (int cont = 0; cont < 12; cont++)
                {
                    soma = soma + (int)readerconsumo["consumo"];
                }
                media = soma / 12;
            }
    quarta-feira, 24 de março de 2010 14:58

Respostas

Todas as Respostas

  • Olá, Joao.

    Utilize o método AddMonths da classe DateTime.

    Ex: DateTime.Today.AddMonths(-12);

    Abraços,


    Paulo Castilho - www.paulocastilho.com.br
    • Sugerido como Resposta Breno Queiroz quarta-feira, 24 de março de 2010 17:39
    quarta-feira, 24 de março de 2010 16:34
  • olá

    está dando erro de sintaxe perto do "00"...

     

    SELECT mesAno, consumo FROM Consumos WHERE IDEquipamento = 3274 AND mesAno BETWEEN 24/3/2009 00:00:00 AND 24/3/2010 00:00:00

    qual é o problema com a query?

    quarta-feira, 24 de março de 2010 16:58
  • Joao!

     

    Coloque aspas simples ' ' nas datas!

     

    Abraço.


    Site: RobsonAlves.net
    Twitter: @robsonalvesti Follow-Me
    LinkedIn: br.linkedin.com/in/robsonalves
    Quem Compartilha, Ensina e Aprende.
    quarta-feira, 24 de março de 2010 17:17
  • Estranho tá dando erro de conversao, mas eu não tentei converter nada...

     

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    quarta-feira, 24 de março de 2010 17:34
  • Para evitar esse problema, além de colocar a data entre aspas simples, pegue sua variavel mes e dê um

    mes.ToString(

    "dd/MM/yyyy")

    Assim, você compara diretamente apenas a data (sempre zerando a hora).


    Ph
    quarta-feira, 24 de março de 2010 17:35
  • Utilize o método AddMonths da classe DateTime como o Paulo disse.

    Ex: DateTime.Today.AddMonths(-12);


    Att,
    Breno Queiroz

    Blogger Breno F. Queiroz
    multiweb Agência Digital
    quarta-feira, 24 de março de 2010 17:39
  • Deu o mesmo erro:

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    public void mediaConsumo12meses(int idequipamento, Label media12meses)
            {
                DateTime mes = DateTime.Today;
                int soma = 0;
                int media = 0;
    
                Conexao = new SqlConnection(StrConexao.ConnectionString);
                Conexao.Open();
                Comando = new SqlCommand("SELECT mesAno, consumo FROM Consumos WHERE IDEquipamento = " + idequipamento + " AND mesAno BETWEEN '" + mes.AddMonths(-12).ToString("dd/MM/yyyy") + "' AND '" + mes.ToString("dd/MM/yyyy") + "'", Conexao);
    
                SqlDataReader readerconsumo = Comando.ExecuteReader();
                readerconsumo.Read();
                
                for (int cont = 0; cont < 12; cont++)
                {
                    soma = soma + (int)readerconsumo["consumo"];
                }
                media = soma / 12;
            }
    quarta-feira, 24 de março de 2010 17:44
  •  Comando = new SqlCommand("SELECT mesAno, consumo FROM Consumos WHERE IDEquipamento = " + idequipamento + " AND mesAno BETWEEN '" + mes.AddMonths(-12).ToShortDateString() + "' AND '" + mes.ToShortDateString() + "'", Conexao);
    


  • Att,
    Breno Queiroz

    Blogger Breno F. Queiroz
    multiweb Agência Digital
quarta-feira, 24 de março de 2010 17:53
  • The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
    quarta-feira, 24 de março de 2010 18:00
  • Comando = new SqlCommand("SELECT mesAno, consumo FROM Consumos WHERE IDEquipamento = " + idequipamento + " AND mesAno BETWEEN  convert(datetime,'" + mes.AddMonths(-12).ToShortDateString() + " ',103)  AND convert(datetime,'" + mes.ToShortDateString() + " ',103) ", Conexao);

    Att,
    Breno Queiroz

    Blogger Breno F. Queiroz
    multiweb Agência Digital

    • Marcado como Resposta joaoluizbt quarta-feira, 24 de março de 2010 18:59
    quarta-feira, 24 de março de 2010 18:25
  • Valeu ae, deu certo.

    quarta-feira, 24 de março de 2010 19:09