Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Seabra

Ajuda com consulta entre datas

Recommended Posts

Seabra

Olá

Tenho esta consulta:

Neste caso na tabela há registos para o dia 19 mas não aparece nada no meu recorset. Se eu colocar na data inicial o dia 18 e final dia 19 já aparece os dados do dia 19.

Já experimentei com  Between mas acontece o mesmo.

As datas estão a ser inseridas com DateTimePicker, mas o resultado final da query é este.

O que pretendo é que quando as duas datas são iguais, apareça os dados desse dia.

Onde estará o erro?

SELECT contadores.Data_Hora as Data_Hora, ID_Contador as
Contador,Nome as
Nome, E_SVazio as H_SVazio, E_Vazio as H_Vazio, E_Cheias as H_Cheias,
E_Ponta as H_Ponta, (E_SVazio+ E_Vazio+ E_Cheias+ E_Ponta) as Total
FROM
Contadores JOIN DadosContadores ON Contadores.ID_Contador =
DadosContadores.ID
WHERE
Convert(varchar(10), contadores.Data_Hora, 104) >= '19-04-2010' And
Convert(varchar(10), contadores.Data_Hora, 104) <= '19-04-2010 ' AND
E_SVazio<>0 AND E_Vazio<>0 AND E_Cheias<>0 AND E_Ponta<>0 AND Uni_Fab
=
'Casita'
ORDER BY contadores.Data_Hora Asc

GObrigado

H.S

Share this post


Link to post
Share on other sites
M6

Antes de mais, isto não tem nada a ver com VB.NET mas sim com SQL.

O 104 não é data em formato alemão dd.mm.yy?

Creio que o problema está na parte da hora, experimenta

Convert(varchar(10), contadores.Data_Hora, 104) >= '19-04-2010 00:00:00' AND
Convert(varchar(10), contadores.Data_Hora, 104) <= '19-04-2010 23:59:00' 


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Seabra

Obrigada atodos.

Bastou mudar  Convert(varchar(10), contadores.Data_Hora, 104) para Convert(varchar(10), contadores.Data_Hora, 105) e ficou resolvido.

Share this post


Link to post
Share on other sites
Seabra

Olá

SQL Server 2008 R2

O meu campo de data hora está neste formato: 21-05-2010 16:37

Só agora verifiquei se eu tiver registos só no dia 21-05-2010 e utilizar esta query:

.............WHERE  Convert(varchar, contadores.Data_Hora, 105) < '21-06-2010'

Só mostra resultados se eu colocar a data '21-05-2010' ou '21-06-2010' ou '21-07-2010' ou '21-08-2010'.... .....

Não mostra resultados se eu colocar as datas:  '23-05-2010' ou '29-06-2010' ou '05-07-2010' ou '30-08-2010'.... .....

Ou seja, chego à conclusão que embora eu utilize o sinal de <, para me mostrar dados, o dia do data tem que coincidir com o dia dos dados. Não interessa qual o mês ou ano.

Resumindo, o que eu pretendo é que me mostre os dados com data inferior a determinada data.

Nota: As datas estão e entrar através de uma DateTimePicker1. A query acima é o resultado que me aprece numa comboBox.

O que é que está mal?

Tenho muita urgencia em resolver isto. Elguêm me pode ajudar?

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
Tuntankamon

O problema está em tentares comparares datas com texto...

Faz um convert do texto que representa a data para datetime e verifica os resultados.

Share this post


Link to post
Share on other sites
Seabra

O problema está em tentares comparares datas com texto...

Faz um convert do texto que representa a data para datetime e verifica os resultados.

Já tentei e não consigo.

devo converter o campo '21-06-2010' no formato de DataHora para tal utilizai

Dim DateTime1 As Date = Convert.ToDateTime(DateTimePicker1.Text)

mas o resultado foi o mesmo.

É possível alguem postar um exemplo de uma consulta SQL com comparação de datas e hora utilizando o campo datahora?

Obrigado

Share this post


Link to post
Share on other sites
Seabra

Neste momento é assim que tenho a query.

SELECT  contadores.Data_Hora as Data_Hora, ID_Contador as Contador,Nome as Nome, E_SVazio as H_SVazio, E_Vazio as H_Vazio, E_Cheias as H_Cheias, E_Ponta as H_Ponta, (E_SVazio+ E_Vazio+ E_Cheias+ E_Ponta) as Total
FROM 
Contadores JOIN DadosContadores ON  Contadores.ID_Contador = DadosContadores.ID 
WHERE  
Convert(varchar(10), contadores.Data_Hora, 105) >= '08-06-2010' 
And Convert(varchar(10), contadores.Data_Hora, 105) <= '08-06-2010' 
AND  Convert(varchar(10), contadores.Data_Hora, 108) >= '00:00:00' 
And Convert(varchar(10), contadores.Data_Hora, 108) <= '23:59:59' 
AND E_SVazio<>0 AND E_Vazio<>0 AND E_Cheias<>0 AND E_Ponta<>0 
ORDER BY contadores.Data_Hora Asc 

Obrigado

Share this post


Link to post
Share on other sites
Tuntankamon

Se a data na base de dados tiver no formato correcto, isto deve funcionar (podes utilizar o BETWEEN):

CAST(contadores.Data_Hora AS DATETIME) >= CAST('08-06-2010 00:00:00' AS DATETIME) 
AND 
CAST(contadores.Data_Hora AS DATETIME) <= CAST('08-06-2010 23:59:59' AS DATETIME) 

Share this post


Link to post
Share on other sites
Seabra

Se a data na base de dados tiver no formato correcto, isto deve funcionar (podes utilizar o BETWEEN):

CAST(contadores.Data_Hora AS DATETIME) >= CAST('08-06-2010 00:00:00' AS DATETIME) 
AND 
CAST(contadores.Data_Hora AS DATETIME) <= CAST('08-06-2010 23:59:59' AS DATETIME) 

Neste contexto como ja disse tenho

DateTimePicker1.Text 'data ninicial

DateTimePicker2.Text 'data final

DateTimePicker3.Text 'hora ninicial

DateTimePicker4.Text 'hora final

como posso fazer a inserçõa destes controlos dentro d do "CAST(.......?

Desde já obrigado pela tua pronta resposta

Seabra

Share this post


Link to post
Share on other sites
Tuntankamon

Por partes, se isto é VB.NET/C#, podes utilizar parametros na query SQL?

Depois qual a razão de teres 4 dtps, se podes fazer o mesmo serviço só com 2?

Share this post


Link to post
Share on other sites
Seabra

Por partes, se isto é VB.NET/C#, podes utilizar parametros na query SQL?

Depois qual a razão de teres 4 dtps, se podes fazer o mesmo serviço só com 2?

Já tentei utilizar só dois dtps mas torna a entrada de dados um puco complicada, alem de não trabalhar muito bem no modo Custom.

De qualquer modo estou a utilizar o VB.net se tiveres alguma forma de ajudar com um exemplo agradeço.

Seabra

Share this post


Link to post
Share on other sites
Tuntankamon

Tenta com algo semlhante a isto...

 'Prepara as datas correctas
Dim data1 As Date = DateTimePicker1.Value.AddHours(DateTimePicker2.Value.Hour).AddMinutes(DateTimePicker2.Value.Minute).AddSeconds(DateTimePicker2.Value.Second)
Dim data2 As Date = DateTimePicker3.Value.AddHours(DateTimePicker4.Value.Hour).AddMinutes(DateTimePicker4.Value.Minute).AddSeconds(DateTimePicker4.Value.Second)

'O comando SQL
Dim com As New SqlCommand("SELECT  contadores.Data_Hora AS Data_Hora, ID_Contador AS Contador,Nome AS Nome, E_SVazio AS H_SVazio, E_Vazio AS H_Vazio, E_Cheias AS H_Cheias, E_Ponta AS H_Ponta, (E_SVazio+ E_Vazio+ E_Cheias+ E_Ponta)  AS Total FROM Contadores JOIN DadosContadores ON  Contadores.ID_Contador = DadosContadores.ID WHERE CAST(contadores.Data_Hora AS DATETIME) >= @D1 AND CAST(contadores.Data_Hora AS DATETIME) <= @D2 AND E_SVazio<>0 AND E_Vazio<>0 AND E_Cheias<>0 AND E_Ponta<>0 ORDER BY contadores.Data_Hora ASC ", varConexao)

'Os parametros
com.Parameters.Clear()
com.Parameters.Add(New SqlParameter("@D1", SqlDbType.DateTime).Value = data1)
com.Parameters.Add(New SqlParameter("@D2", SqlDbType.DateTime).Value = data2)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.