sql >> Base de Datos >  >> RDS >> PostgreSQL

Selección de registros entre dos marcas de tiempo

¿Qué tiene de malo:

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

Si desea operar con un recuento de segundos como interval :

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

Tenga en cuenta cómo utilicé el formato de fecha estándar ISO 8601 YYYY-MM-DD h24:mi:ss que no es ambiguo con cualquier configuración regional o DateStyle ajuste.

Tenga en cuenta también que el primer valor para BETWEEN la construcción debe ser la más pequeña. Si no sabe qué valor es menor, use BETWEEN SYMMETRIC en su lugar.

En su pregunta, se refiere al tipo de fecha y hora timestamp como "fecha", "hora" y "período". En el título, usó el término "marcos de tiempo", que cambié por "marcas de tiempo". Todos estos términos son incorrectos. Intercambiarlos libremente hace que la pregunta sea aún más difícil de entender.

Eso, y el hecho de que solo etiquetó la pregunta psql (el problema apenas se refiere a la terminal de línea de comandos) podría ayudar a explicar por qué nadie respondió durante días. Normalmente, es cuestión de minutos por aquí. Me costó entender tu pregunta, tuve que leerla un par de veces.

Debe comprender los tipos de datos date , interval , time y timestamp - con o sin zona horaria. Comience leyendo el capítulo "Tipos de fecha/hora" en el manual .

El mensaje de error también habría sido de gran ayuda.