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
Lee la documentación.
http://www.postgresql.org/docs/9.1/static/functions-datetime.html
Utilicé una consulta como esa:
WHERE
(
date_trunc(''day'',table1.date_eval) = ''2015-02-09''
)
o
WHERE(date_trunc(''day'',table1.date_eval) >=''2015-02-09''AND date_trunc(''day'',table1.date_eval) <''2015-02-09'')
Juanitos Ingenier.