PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Получаване на брой определени дни от седмицата (уикенд) от интервал в PostgreSQL

Следната функция връща броя на пълните дни от почивните дни между две дати. Тъй като ви трябват пълни дни, можете да прехвърлите времевите клейма към датите, преди да извикате функцията. Връща 0 в случай, че първата дата не е точно преди втората.

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;

Примери:

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

За да получите броя на дните, с изключение на пълните дни през уикенда, просто извадете броя на дните от функцията по-горе:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте поръчката за връщане от в postgresql

  2. Използване на pt-pg-summary Percona Toolkit за PostgreSQL

  3. PostgreSQL 9.3:Обединяване на две колони в една

  4. plpgsql CREATE FUNCTION синтактична грешка при или близо до 'CREATE'

  5. Функция за задействане на PostgreSQL 9.3 за вмъкване в таблица с параметризирано име