PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sélection d'enregistrements entre deux horodatages

Quel est le problème avec :

SELECT a,b,c
FROM   table
WHERE  xtime BETWEEN '2012-04-01 23:55:00'::timestamp
                 AND now()::timestamp;

Si vous souhaitez opérer avec un compte de secondes comme interval :

...
WHERE  xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm
                 AND now()::timestamp;

Notez comment j'ai utilisé le format de date standard ISO 8601 YYYY-MM-DD h24:mi:ss qui est sans ambiguïté avec n'importe quel paramètre régional ou DateStyle réglage.

Notez également que la première valeur de BETWEEN la construction doit être la plus petite. Si vous ne savez pas quelle valeur est la plus petite, utilisez BETWEEN SYMMETRIC à la place.

Dans votre question, vous faites référence au type datetime timestamp comme "date", "heure" et "période". Dans le titre, vous avez utilisé le terme "périodes", que j'ai changé en "horodatages". Tous ces termes sont faux. Les échanger librement rend la question encore plus difficile à comprendre.

Cela, et le fait que vous n'ayez tagué que la question psql (le problème ne concerne guère le terminal de ligne de commande) pourrait aider à expliquer pourquoi personne n'a répondu pendant des jours. Normalement, c'est une question de minutes ici. J'ai eu du mal à comprendre votre question, j'ai dû la lire plusieurs fois.

Vous devez comprendre les types de données date , interval , time et timestamp - avec ou sans fuseau horaire. Commencez par lire le chapitre "Date/Time Types" dans le manuel .

Le message d'erreur aurait également fait beaucoup de chemin.