Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Seabra

Ajuda com consulta entre datas

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Seabra

Obrigada atodos.

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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) 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.