2012-01-04 20 views
11

Estoy convirtiendo un script de Unix con un comando de transacción SQL en un comando de PostgreSQL.Selección de registros entre dos marcas de tiempo

Tengo una tabla con registros que tienen un campo last_update_time (xtime) y deseo seleccionar cada registro en la tabla que se ha actualizado dentro de un período seleccionado.

Digamos, la hora actual es 05/01/2012 10:00:00 y el tiempo seleccionado es 04/01/2012 23:55:00. ¿Cómo selecciono todos los registros de una tabla que se han actualizado entre estas fechas? He convertido las 2 veces en segundos en la secuencia de comandos de Unix antes de emitir el comando psql, y he calculado el intervalo en segundos entre los 2 períodos.

pensé algo así como

SELECT A,B,C FROM table 
WHERE xtime BETWEEN now() - interval '$selectedtimeParm(in secs)' AND now(); 

Tengo problemas para evaluar la Parm para la selectedtimeParm - no se resuelve correctamente.

Nota del editor: No he cambiado el uso incorrecto de los términos period, time frame, time y date para el tipo de fecha y hora timestamp porque discuto que en mi respuesta.

Respuesta

24

¿Qué pasa con:

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; 

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

Tenga en cuenta también que el primer valor para el constructo BETWEEN debe ser el más pequeño. Si no sabe qué valor es más pequeño, use BETWEEN SYMMETRIC.

En su pregunta, consulte el tipo de fecha y hora timestamp como "fecha", "hora" y "período". En el título usaste el término "marcos de tiempo", que cambié a "marcas de tiempo". Todos estos términos son incorrectos. Intercambiando 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 concierne al terminal de la 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 su pregunta, tuve que leerla un par de veces.

Es necesario comprender los tipos de datos date, interval, y timetimestamp - con o sin zona horaria. Comience leyendo el capítulo "Date/Time Types" in the manual.

El mensaje de error habría recorrido un largo camino, también.

+0

Encontré mi respuesta: seleccione * de TABLE donde record_time ENTRE $ from_datetime Y NOW(); Gracias – Sharon

Cuestiones relacionadas