sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat řetězec data začátku a konce týdne v PostgreSQL?

Můžete použít date_trunc('week', ...) .

Například:

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

Pak jej můžete převést na datum, pokud vás čas zahájení nezajímá.

Chcete-li získat také datum ukončení:

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

(Zde jsem použil výchozí formátování, můžete si ho samozřejmě přizpůsobit pro použití MM/DD/RRRR.)

Všimněte si, že pokud chcete provádět srovnání časových razítek, místo použití (date_trunc('week', ...) + '6 days'::interval , možná budete chtít přidat celý týden a použít striktní srovnání pro konec týdne.

Tím se vyloučí y časová razítka poslední den v týdnu (protože uzávěrka je půlnoc toho dne).

    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date

To bude zahrnovat:

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

(To je ve vzácných případech, kdy nemůžete použít date_trunc na y přímo.)

Pokud váš týden začíná v neděli, nahraďte date_trunc('week', x)::date s date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval by mělo fungovat.



  1. Vrácení více tabulek z uložené procedury

  2. Sql Ansi pro správu hodnot DateTime

  3. Použití anotace okna Django v kombinaci s odlišnou klauzulí

  4. Dynamická minimální hodnota pro konkrétní rozsah (mysql)