Tengo la siguiente tabla:
+-----------+-----------+------------+----------+
| id | user_id | start_date | end_date |
| (integer) | (integer) | (date) | (date) |
+-----------+-----------+------------+----------+
Los campos start_date
y end_date
contienen valores de fecha como YYYY-MM-DD
.
Una entrada de esta tabla puede tener este aspecto: (1, 120, 2012-04-09, 2012-04-13)
.
Tengo que escribir una consulta que pueda obtener todos los resultados que coincidan con un período determinado.
El problema es que si quiero obtener resultados desde 2012-01-01
hasta 2012-04-12
, obtengo 0 resultados aunque haya una entrada con start_date = "2012-04-09"y
end_date = "2012-04-13"`.
SELECT *
FROM mytable
WHERE (start_date, end_date) OVERLAPS ('2012-01-01'::DATE, '2012-04-12'::DATE);
Datetime functions es la sección relevante en la documentación.
Para que una consulta funcione en cualquier configuración regional, considere la posibilidad de formatear la fecha usted mismo:
SELECT *
FROM testbed
WHERE start_date >= to_date('2012-01-01','YYYY-MM-DD')
AND end_date <= to_date('2012-04-13','YYYY-MM-DD');