Jump to content

Intervalo de datas e horas


duduml
 Share

Recommended Posts

Pessoal,

tendo a seguinte tabela:

nome: sessoes

campos:

nick

datalogin

horalogin

datalogout

horalogout

registos:

utilizador_lol  07-05-2010  07:00 07-05-2010 18:00:00

utilizador_xD  10-06-2010  06:00 10-06-2010 19:00:00

Como faço para ver todos os registos com datas maiores ou iguais a 07-05-2010 hora 07:00 e fim 10-06-2010 as 18:00

é que eu da maneira que faço ele assume sempre as horas...isto é se pussese entre 02-10 e 03-10 com horas de login e logout iguais, não me retorna nada...:S

fiz-me entender??:S

CUMPS

"use windows, você merece!"

Link to comment
Share on other sites

Para começar, não estou a ver o interesse de teres separado as datas e as horas...

Para fazeres isso podes fazer de várias maneiras, uma por exemplo é criares uma data juntando a data e a hora, outra é encadear as condições.

Talvez algo como isto:

WHERE (datalogin >= 'Data' AND horalogin >= 'Hora') AND (datalogout <='Data2' AND horalogout<='Hora2')
Link to comment
Share on other sites

Separei porque era necessário para outras coisas...

Quanto a condição, já fiz isso...e não dá...se eu puser o dia de ontem no login e às 09:00 e o dia de hoje às 9:00 H, não dá nada...

CUMPS

EDIT:

ou seja, eu tinha isto:

SELECT *
FROM sessoes
WHERE (datalogin >= '06-06-2010' AND horalogin >= '09:00:00') AND (datalogout <= '08-06-2010' AND horalogout <= '09:00:00')

"use windows, você merece!"

Link to comment
Share on other sites

mais ou menos 😛

Nao sou muito bom em sql (isto se estiveres a usar access ou Sql) , mas penso que será algo do genero:

select sessoes.datalogin, sessoes.horalogin, sessoes.datalogout, sessoes.horalogout

from sessoes

where sessoes.datalogin >= 07-05-2010 AND sessoes.horalogin >=07:00 and sessoes.datalogout <=10-06-2010 and sessoes.horalogout <=18:00;

'deve faltar alguns '''' e un ()() mas pronto.

OU então com um betwen, fica mais simplificado... mas esse nao me lembro  :wallbash:

Link to comment
Share on other sites

Ja exprimentas-te juntar a data e a hora E converteres para um Datetime e usares isso no where ?

Algo deste genero

WHERE (CONVERT(DATETIME, datalogin + ' ' + horalogin) >= CONVERT(DATETIME, 'Data' + ' ' + 'Hora')) AND
   (CONVERT(DATETIME, datalogout + ' ' + horalogout) <= CONVERT(DATETIME, 'Data2' + ' ' + 'Hora2'))

Este codigo usa funções do SQL Server. Não sei que motor estas a usar mas existem funcções identicas tanto para oracle, Mysql, etc

"There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/

Link to comment
Share on other sites

duduml,

Tenta algo deste genero

Select *
From sessoes
Where (datalogin Between '07-05-2010' AND '10-06-2010') AND (horalogin Between '07:00' AND '18:00')

Pode ser que funcione,mas como nunca usei muito o BETWEEN nas querys que até hoje fiz, n tenho 100% certeza da veracidade dessa  😛

Link to comment
Share on other sites

Ja exprimentas-te juntar a data e a hora E converteres para um Datetime e usares isso no where ?

Algo deste genero

WHERE (CONVERT(DATETIME, datalogin + ' ' + horalogin) >= CONVERT(DATETIME, 'Data' + ' ' + 'Hora')) AND
   (CONVERT(DATETIME, datalogout + ' ' + horalogout) <= CONVERT(DATETIME, 'Data2' + ' ' + 'Hora2'))

Este codigo usa funções do SQL Server. Não sei que motor estas a usar mas existem funcções identicas tanto para oracle, Mysql, etc

Eu uso o PostGreSQL, é o que se usa aqui na empresa...vou tentar isso...

duduml,

Tenta algo deste genero

Select *
From sessoes
Where (datalogin Between '07-05-2010' AND '10-06-2010') AND (horalogin Between '07:00' AND '18:00')

Pode ser que funcione,mas como nunca usei muito o BETWEEN nas querys que até hoje fiz, n tenho 100% certeza da veracidade dessa  😛

vou também ver se consigo com isso, mas não sei...

Se tiveres os campos como string, terás de converter para data que era uma das opções que tinha referido no inicio e que o SKM exemplificou.  😛

Não, tenho como data e hora...  :dontgetit:

Obrigado a todos!  😄

"use windows, você merece!"

Link to comment
Share on other sites

Bem, das propostas, a do skm, é a mais adequada...contudo, não consegui-lo aplica-la em POstGre, e não encontro info na net...😛

De qualquer maneira, obrigado por tudo a todos...se conseguir resolver, aviso...até lá, fiquem bem...visto que já não podem ajudar...

Cumprimentos

"use windows, você merece!"

Link to comment
Share on other sites

Esteve quase....mas não! há algo errado...

A consulta não dá erro, mas não devolve nada...

SELECT *
FROM sessoes
WHERE CAST (datalogin as timestamp) >= to_timestamp( '07-06-2010',' 09:00:00')  AND
           CAST (datalogout as timestamp) <= to_timestamp( '08-06-2010',' 10:00:00')

Sugestões?

"use windows, você merece!"

Link to comment
Share on other sites

Para começar estás a utilizar mal  a função...

Os parâmetros são, 'Data', 'FormatoDaData'... E não 'Data','Hora'...  😄

Depois porquê que utilizas timestamp em vez de date?

*EDIT*

Algo semelhante a isto, se calhar terás de fazer outro Cast por causa da passagem das datas para texto....

SELECT *
FROM sessoes
WHERE CAST((datalogin + ' ' + horalogin) AS DATETIME) >= to_date('07-06-2010 09:00:00','DD-MM-YYYY HH:MI:SS') 
AND   
CAST((datalogout + ' ' + horalogout) AS DATETIME) <= to_date('08-06-2010 10:00:00','DD-MM-YYYY HH:MI:SS') 
Link to comment
Share on other sites

Para começar estás a utilizar mal  a função...

Os parâmetros são, 'Data', 'FormatoDaData'... E não 'Data','Hora'...  😄

Depois porquê que utilizas timestamp em vez de date?

*EDIT*

Algo semelhante a isto, se calhar terás de fazer outro Cast por causa da passagem das datas para texto....

SELECT *
FROM sessoes
WHERE CAST((datalogin + ' ' + horalogin) AS DATETIME) >= to_date('07-06-2010 09:00:00','DD-MM-YYYY HH:MI:SS') 
AND   
CAST((datalogout + ' ' + horalogout) AS DATETIME) <= to_date('08-06-2010 10:00:00','DD-MM-YYYY HH:MI:SS') 

Uso timestamp porque é esse tipo que contém a data e a hora, o date apenas suporta a data...

Vou tentar como sugeris-te..

obrigado pela paciência 👍

"use windows, você merece!"

Link to comment
Share on other sites

CAST((datalogin + ' ' + horalogin) AS DATETIME

a sintaxe não é esta...ele não aceita o "+" ? no entanto, a palavra reservada "convert" existe para PGsql... vou ver se encontro a sintaxe para converter

"use windows, você merece!"

Link to comment
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
 Share

×
×
  • Create New...

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.