106 votes

SQL Obtenir tous les enregistrements datant de plus de 30 jours

Maintenant, j'ai trouvé beaucoup de questions SO similaires, y compris une ancienne des miennes, mais ce que j'essaie de faire, c'est obtenir tout enregistrement datant de plus de 30 jours mais mon champ de table est unix_timestamp. Tous les autres exemples semblent utiliser des champs DateTime ou quelque chose dans le genre. J'ai essayé certains et je n'ai pas réussi à les faire fonctionner.

Cela ne fonctionne certainement pas ci-dessous. De plus, je ne veux pas une date entre deux dates, je veux tous les enregistrements après 30 jours à partir d'un timestamp unix stocké dans la base de données. J'essaie de nettoyer les utilisateurs inactifs.

des exemples simples.. ne fonctionnent pas.

SELECT * from profils WHERE last_login < UNIX_TIMESTAMP(NOW(), INTERVAL 30 DAY)  

Et j'ai essayé ceci

SELECT * from profils WHERE UNIX_TIMESTAMP(last_login - INTERVAL 30 DAY) 

Je ne suis pas très fort en requêtes de date complexes. Toute aide est appréciée.

159voto

Igor Romanchenko Points 22768

Essayez quelque chose comme:

SELECT * from profiles WHERE to_timestamp(last_login) < NOW() - INTERVAL '30 days' 

Citation du manuel:

Une fonction to_timestamp à un seul argument est également disponible; elle accepte un argument à double précision et convertit de l'époque Unix (secondes depuis le 01-01-1970 00:00:00+00) en timestamp avec le fuseau horaire. (Les époques Unix entières sont implicitement converties en double précision.)

67voto

Jan Spurny Points 3159

Sauf si j'ai manqué quelque chose, cela devrait être assez facile :

SELECT * FROM profiles WHERE last_login < NOW() - INTERVAL '30 days';

4voto

tanstaafl Points 74

Que diriez-vous de

SELECT * from profiles WHERE last_login < VALUEOFUNIXTIME30DAYSAGO

ou

SELECT * from profiles WHERE last_login < (extract(epoch from now())-2592000)

Jetez un œil à ce post:

https://dba.stackexchange.com/questions/2796/how-do-i-get-the-current-unix-timestamp-from-postgresql

et à ceci

http://www.epochconverter.com/

0voto

KPC Points 57

Utilisation de Postgres:

SELECT *
FROM profiles
WHERE
    to_timestamp(last_login) < NOW() - '30 jours'::INTERVAL

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