sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo obtener la cadena de fecha de inicio y finalización de la semana en PostgreSQL?

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.