47 votes

Sélectionnez uniquement les horodatages d'aujourd'hui (depuis minuit)

J'ai un serveur avec PostgreSQL 8.4 qui est redémarré tous les soirs à 01h00 (ne demandez pas) et j'ai besoin d'obtenir une liste des utilisateurs connectés (c'est-à-dire que leurs horodatages sont u.login > u.logout ):

 SELECT u.login, u.id, u.first_name
FROM pref_users u
WHERE u.login > u.logout and 
      u.login > now() - interval '24 hour'
ORDER BY u.login;

           login            |           id   | first_name
----------------------------+----------------+-------------
 2012-03-14 09:27:33.41645  | OK171511218029 | Alice
 2012-03-14 09:51:46.387244 | OK448670789462 | Bob
 2012-03-14 09:52:36.738625 | OK5088512947   | Sergej

Mais la comparaison de u.login > now()-interval '24 hour' fournit également les utilisateurs avant 01h00, ce qui est mauvais, en particulier. les matins.

Existe-t-il un moyen efficace d' obtenir les connexions depuis le dernier 01:00 sans faire d'acrobaties de cordes avec to_char() ?

15voto

Suisse Points 1251
select * from termin where DATE(dateTimeField) >= CURRENT_DATE AND DATE(dateTimeField) < CURRENT_DATE + INTERVAL '1 DAY'

Cela fonctionne pour moi - il sélectionne TOUTES les lignes avec la date d'aujourd'hui.

13voto

Frank Bollack Points 10208

Un moyen simple d'obtenir uniquement les horodatages du jour en cours depuis 01h00 consiste à filtrer avec CURRENT_DATE + interval '1 hour'

Votre requête devrait donc ressembler à ceci :

 SELECT u.login, u.id, u.first_name
FROM pref_users u
WHERE u.login > u.logout AND
      u.login > CURRENT_DATE + interval '1 hour'
ORDER BY u.login;

J'espère que cela pourra aider.

13voto

Vivegan Points 131
select * from termin where DATE(dateTimeField) = '2015-11-17'

Cela fonctionne bien pour moi!

4voto

Clodoaldo Neto Points 26723
where 
    u.login > u.logout 
    and     
    date_trunc('day', u.login) = date_trunc('day', now()) 
    and 
    date_trunc('hour', u.login) >= 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X