PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter a string de data de início e término da semana no PostgreSQL?


Você pode usar date_trunc('week', ...) .

Por exemplo:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00

Em seguida, você pode converter isso em uma data, se não estiver interessado em um horário de início.

Para obter a data de término também:
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

(Eu usei a formatação padrão aqui, você pode adaptar isso para usar MM/DD/AAAA.)

Observe que, se você quiser fazer comparações em timestamps, em vez de usar (date_trunc('week', ...) + '6 days'::interval , convém adicionar uma semana inteira e usar uma comparação estrita para o final da semana.

Isso excluirá y timestamps no último dia da semana (já que o horário de corte é meia-noite do dia).
    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date

Isso os incluirá:
    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)

(Isso é nos raros casos em que você não pode usar date_trunc em y diretamente.)

Se sua semana começa em um domingo, substituindo date_trunc('week', x)::date com date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval Deveria trabalhar.