sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man start- och slutdatum för veckan i PostgreSQL?

Du kan använda date_trunc('week', ...) .

Till exempel:

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

Sedan kan du konvertera detta till ett datum om du inte är intresserad av en starttid.

För att få slutdatum också:

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

(Jag har använt standardformateringen här, du kan naturligtvis anpassa detta för att använda MM/DD/ÅÅÅÅ.)

Observera att om du vill göra jämförelser på tidsstämplar, istället för att använda (date_trunc('week', ...) + '6 days'::interval , du kanske vill lägga till en hel vecka och använda en strikt jämförelse för slutet av veckan.

Detta exkluderar y tidsstämplar den sista dagen i veckan (eftersom bryttiden är midnatt på dagen).

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

Detta kommer att inkludera dem:

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

(Det är i de sällsynta fall då du inte kan använda date_truncy direkt.)

Om din vecka börjar på en söndag, ersätter du date_trunc('week', x)::date med date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval borde fungera.



  1. MySQL distinkt räknas om förhållandena är unika

  2. Kan du använda MySQL för att ansluta till en fristående databas t.ex. mydata.db?

  3. MySQL XML-förfrågan

  4. Hur ansluter man mysql-databas med Dart?