Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

notax

Consulta MySQL Data+hora

Recommended Posts

Galera, to me pegando aqui com uma query que no access rolava e no mysql ocorrem coisas muito curiosas...

 

É o seguinte:

 

No bd tenho um campo de data e outro campo com hora...

 

Ou seja, se incluo algo agora, seria incluido no campo data 2011-02-24 e no campo hora 17:11:55

 

O que eu quero são consultas por periodo, ou seja, betwenn...

 

Faço assim:

SQL = "SELECT * FROM minha_tabela where campo1 = '"&var1&"' and data BETWEEN '"&(datai)&"' and '"&(dataf)&"' and hora BETWEEN '"&(horai)&"' and '"&(horaf)&"' order by codigo desc limit " & (paginaAtual - 1) * pageSize & " , " & pageSize

 

O que ocorre é que se peço um relatório por ex. de 24/02/2011 as 07:00 ao dia 25/02/2011 as 07:00 ele ignora as datas e pega só o que aparece nesses dias nessa hora específica, ou seja, deixa zilhoes de resultados de fora...

 

Será que consegui me explicar?

 

Será que alguém sabe ajudar?

 

Resumindo: preciso que a query considere a troca de dias ou seja, das 07 de hj até as 07 hors de amanha seriam na realidade 24hrs de informações e não somente os registros incluidos as 07:00 sacaram?

 

Valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

converte os dados para tipo data, no between os campos precisam ser do tipo data

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo retorno... Sim sim... só coloquei exemplo...

 

no betwwen sempre estiveram nesse formato tb: yyyy-mm-dd h:m:n

 

Exatamente como no bd... ou seja, é outro erro... alguém da mais alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, alguém me da uma força com a sintexe dessa query?

 

Fiz testes e quando o data e hora estão no mesmo campo posso usar o between tranquilo... bastando para isso unir tb a data e hora no between, exemplo:

 

digamos que no bd estivesse com o campo data assim:

 

yyyy-mm-dd h:m:n

 

e as varives de consulta fossem:

datai = yyyy(i)-mm(i)-dd(i) h(i):m(i):n(i)

dataf = yyyy(f)-mm(f)-dd(f) h(f):m(f):n(f)

 

daria para fazer essa consulta barbada apenas fazendo isso:

sql = select * from tabela where data between '"&datai&"' and '"&dataf&"'

 

O problema é que no bd tenho os campos separados de data e hora... então a dúvida é: como monto essa query para ficar igual a de cima, lembrando que no bd tenho os campos da seguinte forma:

data = yyyy-mm-dd

hora = h:m:n

 

 

Pensei em fazer assim, mas não rolou:

sql = select * from tabela where data " & " " & hora & '"&datai&"' and '"&dataf&"'

 

Mas deu erro... algué dá uma força?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas então, acho que o problema não nem nunca foi o formato das datas, o problema, na minha opinião, é que no bd temos dois campos, um com data e outro com horas, sendo que o melhor para o que eu quero seria ter um campo só...

 

Então pergunto, aklguém sabe uma forma de unificar esses dois campos na query, seja, fazer como se os dois campos data e hora fossem um só?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo tem que ser do tipo DATETIME.

 

Para pegar somente a Data neste caso é:

CONVERT(VARCHAR, Campo_Data, 103) As Data

 

Somente Hora:

 

CONVERT(VARCHAR, Campo_Data, 108) As Hora

 

Consulta:

 

SELECT * FROM Tabela WHERE Campo_Data BETWEEN CONVERT(DATETIME, '01/02/2011', 103) AND CONVERT(DATETIME, '28/02/2011', 103)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente, agradeço muito... mas acho que eu não estou me expressando corretamente... vejam novamente:

 

IMPORTANTE: tenham em vista que eu sei formatar as datas e horas corretamente... ok?

 

Fiz alguns testes e quando o data e hora estão no mesmo campo posso usar o between tranquilo... bastando para isso unir tb a data e hora no between, exemplo:

 

digamos que no bd estivesse com o campo data formatado assim (não é o meu caso):

 

yyyy-mm-dd h:m:n

 

e as varives de consulta fossem:

datai = yyyy1-mm1-dd1 h1:m1:n1

dataf = yyyy2-mm2-dd2 h2:m2:n2

 

daria para fazer essa consulta barbada apenas fazendo isso:

 

sql = select * from tabela where data between '"&datai&"' and '"&dataf&"'

 

Ou seja, o resultado dessa consulta seria todos os registros que estejam entre a data e hora inicial e a data e hora final...

 

O problema é que no meu bd tenho os campos separados de data e hora... ou seja, um campo para data e outro apenas para hora, então a dúvida é: como monto essa query para ficar igual a de cima, lembrando que no bd tenho os campos da seguinte forma:

data = yyyy-mm-dd

hora = h:m:n

 

Pensei em fazer assim, mas não rolou:

 

sql = select * from tabela where data " & " " & hora & '"&datai&"' and '"&dataf&"'

 

Mas deu erro... algué dá uma força?

 

Percebam que se eu faço da forma ovia, ou seja, um between com data e outro between com hora dará um erro lógico, por que o bd não consegue interpretar que aquela hora pertence aquela data, pois estão em campos diferentes, entenderam?

 

Rola um help?

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa uma função para converter os dados primeiro

 

session.lcid=1046
function formatadata(data)
dia=day(data)
mes =month(data)
ano=year(data)
formatadata=dia&"/"&mes&"/"&ano
end function

 

depois usa na string SQL, exemplo:

 

SQL1 = "INSERT INTO NEWSLETTER (NewsletterNome,NewsletterEmail,NewsletterData,NewsletterHora,NewsletterIP,FL

G_EMAIL) VALUES ('"&Nome&"','"&Email&"',#"&formatadata(NewsletterData)&"#,'"&NewsletterHora&"','"&NewsletterIP&"','"&NewsletterFLG&"')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius Ianni cara, sua ideia é muito boa! Não tinha pensado nisso... vou tentar aqui e posto na sequencia... acredito que deve ter um jeito de fazer em uma só query... já havia visto isso há um tempo atrás mas perdi o link... todo caso vou testar sua dica... deve sim fucnionar!

 

Aos outros agradeço muito a ajuda... mas sigo reforçando NÃO TENHO PROBLEMAS COM A FORMATAÇÃO DAS DATAS... se lerem atentamente o tópico verão que não se trata disso... ok? mas agradeço mesmo, toda ajuda é muito bem vinda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.