sql >> Database >  >> RDS >> PostgreSQL

Aantal bepaalde dagen van de week (weekend) ophalen uit interval in PostgreSQL

De volgende functie retourneert het aantal volledige weekenddagen tussen twee datums. Omdat je hele dagen nodig hebt, kun je de tijdstempels casten naar datums voordat je de functie aanroept. Het geeft 0 terug als de eerste datum niet precies voor de tweede valt.

CREATE FUNCTION count_full_weekend_days(date, date)
  RETURNS int AS
$BODY$
  SELECT
    ($1 < $2)::int
      *
    (
      (($2 - $1) / 7) * 2
        + 
      (EXTRACT(dow FROM $1)<6 AND EXTRACT(dow FROM $2)>0 AND EXTRACT(dow FROM $1)>EXTRACT(dow FROM $2))::int * 2
        +
      (EXTRACT(dow FROM $1)=6 AND EXTRACT(dow FROM $2)>0)::int
        +
      (EXTRACT(dow FROM $2)=0 AND EXTRACT(dow FROM $1)<6)::int
    );
$BODY$
  LANGUAGE 'SQL' IMMUTABLE STRICT;

Voorbeelden:

SELECT COUNT_FULL_WEEKEND_DAYS('2009-04-10', '2009-04-20');
# returns 4

SELECT COUNT_FULL_WEEKEND_DAYS('2009-04-11', '2009-04-20');
# returns 3 (11th is Saturday, so it shouldn't be counted as full day)

SELECT COUNT_FULL_WEEKEND_DAYS('2009-04-12', '2009-04-20');
# returns 2 (12th is Sunday, so it shouldn't be counted as full day)

SELECT COUNT_FULL_WEEKEND_DAYS('2009-04-13', '2009-04-20');
# returns 2

Om het aantal dagen behalve volledige weekenddagen te verkrijgen, trekt u eenvoudig het aantal dagen af ​​van de bovenstaande functie:

SELECT
  '2009-04-20'::date
    -
  '2009-04-13'::date
    -
   COUNT_FULL_WEEKEND_DAYS('2009-04-13', '2009-04-20');


  1. Zeer trage (1 seconde) verbindingen

  2. Gebruik een trigger om een ​​invoeging of update te stoppen

  3. Effectieve monitoring van MySQL-replicatie met SCUMM-dashboards:deel 2

  4. PDO::ERRMODE_EXCEPTION onderdrukt waarschuwing niet