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

Získání počtu určitých dnů v týdnu (víkendu) z intervalu v PostgreSQL

Následující funkce vrací počet celých víkendových dnů mezi dvěma daty. Protože potřebujete celé dny, můžete před voláním funkce přenést časová razítka na data. Vrátí 0 v případě, že první datum není přesně před druhým.

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;

Příklady:

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

Chcete-li získat počet dnů kromě celých víkendových dnů, jednoduše odečtěte počet dnů od výše uvedené funkce:

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


  1. Chyba MySQL:#1142 - Příkaz SELECT byl uživateli odepřen

  2. pgFincore 1.2, rozšíření PostgreSQL

  3. pgpredict – Prediktivní analytika v PostgreSQL

  4. připojení ke kontejneru docker-compose mysql odepře přístup, ale docker se stejným obrazem ne