DATA HORAS SQL 2012/09/10 00:00:00
Bom dia.
Cá estou precisando novamente da ajuda de vocês. Estou desenvolvendo uma aplicação que fará um select em uma base de dados. No select na querry WHERE há um BETWEEN data inicial e data final. Eu substitui essas datas por um Datetimepicker. O problema é que eu preciso que na data inicial contenha 00:00:00 e na data final 23:59:59 se não, o resultado não será correto, como acrescento essa hora?
//Cria Parametros para substituir na Querry
cmd2.Parameters.Add([Ô]@data1[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date; + [Ô]00:00:00[Ô]
cmd2.Parameters.Add([Ô]@data2[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date; + [Ô]23:59:59[Ô]
Cá estou precisando novamente da ajuda de vocês. Estou desenvolvendo uma aplicação que fará um select em uma base de dados. No select na querry WHERE há um BETWEEN data inicial e data final. Eu substitui essas datas por um Datetimepicker. O problema é que eu preciso que na data inicial contenha 00:00:00 e na data final 23:59:59 se não, o resultado não será correto, como acrescento essa hora?
//Cria Parametros para substituir na Querry
cmd2.Parameters.Add([Ô]@data1[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date; + [Ô]00:00:00[Ô]
cmd2.Parameters.Add([Ô]@data2[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date; + [Ô]23:59:59[Ô]
Assim deve funcionar...
String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpIni.Value, [Ô]00:00:00[Ô])
String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpFim.Value, [Ô]23:59:59[Ô])
Oi Jonathan,
Muito obrigado pela ajuda. Não sei por qual motivo não funcionou. Não apresentou nenhum erro, mas não retornou a informação correta. Eu fiz o seguinte:
Substitui ISTO:
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date;
Por ISTO:
cmd2.Parameters[[Ô]@data1[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpIni.Value, [Ô]00:00:00[Ô])
cmd2.Parameters[[Ô]@data2[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpFim.Value, [Ô]23:59:59[Ô])
A estrutura da Querry é a seguinte:
WHERE dtFaturamento BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô]
Eu substituà as datas por variáveis ficando assim:
WHERE dtFaturamento BETWEEN @data1 AND @data2
Assim com os dois Datetimepicker eu colocaria a data inicial e a data final, os Pickers estão configurados como short. Ate aà funcionou legal, o problema é que o Picker coloca apenas a data, e no meu banco, se não colocar o horário do inicio e o horário final, não aparece as vendas do ultimo dia. Por exemplo, eu seleciono o perÃodo de 01/08/2012 até 31/08/2012 mas não aparece os lançamentos do dia 31, mas se eu rodar a querry com o horário, conforme citei acima, funciona perfeitamente.
Muito obrigado pela ajuda. Não sei por qual motivo não funcionou. Não apresentou nenhum erro, mas não retornou a informação correta. Eu fiz o seguinte:
Substitui ISTO:
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date;
Por ISTO:
cmd2.Parameters[[Ô]@data1[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpIni.Value, [Ô]00:00:00[Ô])
cmd2.Parameters[[Ô]@data2[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpFim.Value, [Ô]23:59:59[Ô])
A estrutura da Querry é a seguinte:
WHERE dtFaturamento BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô]
Eu substituà as datas por variáveis ficando assim:
WHERE dtFaturamento BETWEEN @data1 AND @data2
Assim com os dois Datetimepicker eu colocaria a data inicial e a data final, os Pickers estão configurados como short. Ate aà funcionou legal, o problema é que o Picker coloca apenas a data, e no meu banco, se não colocar o horário do inicio e o horário final, não aparece as vendas do ultimo dia. Por exemplo, eu seleciono o perÃodo de 01/08/2012 até 31/08/2012 mas não aparece os lançamentos do dia 31, mas se eu rodar a querry com o horário, conforme citei acima, funciona perfeitamente.
Citação:A estrutura da Querry é a seguinte:
WHERE dtFaturamento BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô]
Você colocou um Breakpoint para ver se o resultado está saindo como o da estrutura acima?
Bom dá para fazer um teste também para filtrar os dados do dia 17 por exemplo coloque como dia inicial 17 e final 18, já peguei uma vez um erro dessa forma.
Opa, coloquei sim o breakpoint e aparentemente o objeto estava recebendo a informação que deveria receber, conforme envio print em anexo. No entanto coloquei o profile e percebi que não era isso que ocorria. A querry era executada sem o horário.
QUERRY PROFILE:
exec sp_executesql N[ô]SELECT CAST(SUM(CASE WHEN StDevolucao =1 THEN (vlcalculado * qtdproduto * -1) ELSE (vlcalculado * qtdproduto) End) AS MONEY) AS Vendas FROM GSN_PE_EMPRESA.dbo.PedidoItem WHERE dtFaturamento BETWEEN @data1 AND @data2 AND CdNatoperacao IN ([ô][ô]00[ô][ô],[ô][ô]01[ô][ô],[ô][ô]02[ô][ô],[ô][ô]03[ô][ô],[ô][ô]07[ô][ô],[ô][ô]08[ô][ô], [ô][ô]09[ô][ô],[ô][ô]12[ô][ô], [ô][ô]18[ô][ô],[ô][ô]40[ô][ô],[ô][ô]41[ô][ô],[ô][ô]44[ô][ô])[ô],N[ô]@data1 date,@data2 date[ô],@data1=[ô]2012-08-01[ô],@data2=[ô]2012-08-31[ô]
Novamente agradeço o apoio.
QUERRY PROFILE:
exec sp_executesql N[ô]SELECT CAST(SUM(CASE WHEN StDevolucao =1 THEN (vlcalculado * qtdproduto * -1) ELSE (vlcalculado * qtdproduto) End) AS MONEY) AS Vendas FROM GSN_PE_EMPRESA.dbo.PedidoItem WHERE dtFaturamento BETWEEN @data1 AND @data2 AND CdNatoperacao IN ([ô][ô]00[ô][ô],[ô][ô]01[ô][ô],[ô][ô]02[ô][ô],[ô][ô]03[ô][ô],[ô][ô]07[ô][ô],[ô][ô]08[ô][ô], [ô][ô]09[ô][ô],[ô][ô]12[ô][ô], [ô][ô]18[ô][ô],[ô][ô]40[ô][ô],[ô][ô]41[ô][ô],[ô][ô]44[ô][ô])[ô],N[ô]@data1 date,@data2 date[ô],@data1=[ô]2012-08-01[ô],@data2=[ô]2012-08-31[ô]
Novamente agradeço o apoio.
Alguem tem alguma pista? Essa é a classe onde fica o SELECT.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
//CLASSE PUBLICA DE VARIÃVEIS PARA UTILIZAR EM TODO SOFTWARE
public class Variaveis
{
//STRING PARA JUNÇÃO DAS VARIÃVEIS
public static string banco1 = qry + ba + PIT + clausula1;
public static string banco2 = qry + ba + PIT + clausula2;
public static string banco3 = qry + ba + PIT + clausula3;
//-/////////////////////// VARIAVEIS BA //////////////////////////////////////////////////////
public const string ba = [Ô]BA_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS CE //////////////////////////////////////////////////////
public const string ce = [Ô]CE_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS DF //////////////////////////////////////////////////////
public const string df = [Ô]DF_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS GO //////////////////////////////////////////////////////
public const string go = [Ô]GO_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS MG //////////////////////////////////////////////////////
public const string mg = [Ô]MG_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS MT //////////////////////////////////////////////////////
public const string mt = [Ô]MT_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS PE //////////////////////////////////////////////////////
public const string pe = [Ô]PE_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS RJ //////////////////////////////////////////////////////
public const string rj = [Ô]RJ_EMPRESA.dbo.[Ô];
//-/////////////////////// VARIAVEIS SP //////////////////////////////////////////////////////
public const string sp = [Ô]SP_EMPRESA.dbo.[Ô];
//####################################################################################
/////////////////////QUERRYS QUE SERÃO CHAMADAS PELAS VARIAVEIS///////////////////////
//####################################################################################
//QUERRY UNIDADES
public const string qry = [Ô]SELECT[Ô]
+ [Ô] CAST(SUM(vlcalculado * qtdproduto) AS MONEY) AS Vendas[Ô]
+ [Ô] FROM [Ô];
//####################################################################################
////////////////////////////////////TABELAS DOS BANCOS////////////////////////////////
//####################################################################################
public static string PIT = [Ô]PedidoItem[Ô];
//####################################################################################
/////////////////////////////////// WHERE DOS SELECTS ////////////////////////////////
//####################################################################################
public static string clausula1 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao IN ([ô]00[ô],[ô]01[ô],[ô]02[ô],[ô]03[ô],[ô]07[ô],[ô]08[ô], [ô]09[ô],[ô]12[ô], [ô]18[ô])[Ô];
public static string clausula2 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao = [ô]05[ô][Ô];
public static string clausula3 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao IN ([ô]40[ô],[ô]41[ô],[ô]44[ô])[Ô];
}
}
Você está usando parâmetros, não passe o valor como string, passe como DateTime mesmo, o 00:00:00 você não precisa colocar já que ele por padrão já vai considerar este horario, então faça algo do tipo
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Add(new TimeSpan(23,59,59));
Eu geralmente nem mesmo defino o tipo de dados na hora de adicionar o parâmetro, acho mais prático usar o AddWithValue onde ele vai pegar o tipo do parâmetro de acordo com o tipo de variável passada pra ele, então passando um DateTime ele já sabe que tem que tratar como data.
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Add(new TimeSpan(23,59,59));
Eu geralmente nem mesmo defino o tipo de dados na hora de adicionar o parâmetro, acho mais prático usar o AddWithValue onde ele vai pegar o tipo do parâmetro de acordo com o tipo de variável passada pra ele, então passando um DateTime ele já sabe que tem que tratar como data.
Não funcionou, mas peguei a sua ideia e fiz o seguinte, seria isso?
Aparentemente assim funcionou!
cmd1.Parameters.AddWithValue([Ô]@data1[Ô], this.dtpIni.Value.Add(new TimeSpan(00, 00, 00)));
cmd1.Parameters.AddWithValue([Ô]@data2[Ô], this.dtpFim.Value.Add(new TimeSpan(23, 59, 59)));
Aparentemente assim funcionou!
Agora que reparei uma coisa na sua screenshot, você percebeu que lá você definia o formato como SqlDbType.Date, então, este formato suporta apenas data sem horário, provavelmente se você mudasse lá para SqlDbType.DateTime funcionaria, mas o AddWithValue já acerta isso sozinho então é mais fácil usar ele.
São estes pequenos detalhes que se deixa passar que causam os erros mais chatos de se corrigir.
São estes pequenos detalhes que se deixa passar que causam os erros mais chatos de se corrigir.
Muito obrigado pelo apoio a todos. é uma pena que não possa escolher 2 soluções.
Agradecimento especial para JONATHANSTECKER e OCELOT pela paciencia.
Peguei a a oreintação que o Jonathan passou e troquei de Date para DateTime e funcionou perfeitamente também, como não vi isso hauahua, sou muito burro mesmo!
Agradecimento especial para JONATHANSTECKER e OCELOT pela paciencia.
Peguei a a oreintação que o Jonathan passou e troquei de Date para DateTime e funcionou perfeitamente também, como não vi isso hauahua, sou muito burro mesmo!
Tópico encerrado , respostas não são mais permitidas