Puede usar date_trunc('week', ...)
.
Por ejemplo:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Luego, puede convertir esto en una fecha, si no está interesado en una hora de inicio.
Para obtener también la fecha de finalización:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp)::date
|| ' '
|| (date_trunc('week', '2012-07-25 22:24:22'::timestamp)+ '6 days'::interval)::date;
-> 2012-07-23 2012-07-29
(He usado el formato predeterminado aquí, por supuesto, puede adaptarlo para usar MM/DD/YYYY).
Tenga en cuenta que, si desea realizar comparaciones en las marcas de tiempo, en lugar de usar (date_trunc('week', ...) + '6 days'::interval
, es posible que desee agregar una semana completa y usar una comparación estricta para el final de la semana.
Esto excluirá y
marcas de tiempo en el último día de la semana (ya que la hora límite es la medianoche del día).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Esto los incluirá:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Eso es en los casos raros en los que no puede usar date_trunc
el y
directamente.)
Si su semana comienza un domingo, reemplace date_trunc('week', x)::date
con date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
debería funcionar.