rango operaciones generar fechas fecha consultas consultar consulta con complejas comparar avanzadas sql postgresql date between

operaciones - generar rango de fechas sql



Consulta Postgresql entre intervalos de fechas (3)

Con las fechas (y las horas), muchas cosas se vuelven más simples si usa >= start AND < end .

Por ejemplo:

SELECT user_id FROM user_logs WHERE login_date >= ''2014-02-01'' AND login_date < ''2014-03-01''

En este caso, aún necesita calcular la fecha de inicio del mes que necesita, pero eso debería ser sencillo de muchas maneras.

La fecha de finalización también se simplifica; solo agregue exactamente un mes. Sin problemas con 28, 30, 31, etc.


Esta estructura también tiene la ventaja de poder mantener el uso de índices.


Muchas personas pueden sugerir un formulario como el siguiente, pero no usan índices:

WHERE DATEPART(''year'', login_date) = 2014 AND DATEPART(''month'', login_date) = 2

Esto implica calcular las condiciones para cada fila en la tabla (un escaneo) y no usar el índice para encontrar el rango de filas que coincidirá (una búsqueda de rango).

Estoy intentando consultar mi postgresql db para devolver resultados donde una fecha es en cierto mes y año. En otras palabras, me gustaría tener todos los valores para un mes-año.

La única forma en que he podido hacerlo hasta ahora es así:

SELECT user_id FROM user_logs WHERE login_date BETWEEN ''2014-02-01'' AND ''2014-02-28''

El problema con esto es que tengo que calcular la primera fecha y la última fecha antes de consultar la tabla. ¿Hay una manera más simple de hacer esto?

Gracias


De PostreSQL 9.2 Los tipos de rango son compatibles. Entonces puedes escribir esto como:

SELECT user_id FROM user_logs WHERE ''[2014-02-01, 2014-03-01]''::daterange @> login_date

esto debería ser más eficiente que la comparación de cadenas