PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Selezione di record tra due timestamp

Cosa c'è di sbagliato in:

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

Se vuoi operare con un conteggio di secondi come interval :

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

Nota, come ho utilizzato il formato data standard ISO 8601 YYYY-MM-DD h24:mi:ss che è inequivocabile con qualsiasi locale o DateStyle impostazione.

Nota anche che il primo valore per BETWEEN costrutto deve essere quello più piccolo. Se non sai quale valore è più piccolo, usa BETWEEN SYMMETRIC invece.

Nella tua domanda fai riferimento al tipo datetime timestamp come "data", "ora" e "periodo". Nel titolo hai usato il termine "time frame", che l'ho cambiato in "timestamp". Tutti questi termini sono sbagliati. Scambiarli liberamente rende la domanda ancora più difficile da capire.

Questo, e il fatto che hai taggato solo la domanda psql (il problema difficilmente riguarda il terminale della riga di comando) potrebbe aiutare a spiegare perché nessuno ha risposto per giorni. Normalmente, è questione di pochi minuti da queste parti. Ho avuto difficoltà a capire la tua domanda, ho dovuto leggerla un paio di volte.

Devi comprendere i tipi di dati date , interval , time e timestamp - con o senza fuso orario. Inizia leggendo il capitolo "Tipi di data/ora" nel manuale .

Anche il messaggio di errore avrebbe fatto molta strada.