PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận số ngày nhất định trong tuần (cuối tuần) từ khoảng thời gian trong PostgreSQL

Hàm sau trả về số ngày cuối tuần đầy đủ giữa hai ngày. Khi bạn cần đủ ngày, bạn có thể truyền dấu thời gian cho các ngày trước khi gọi hàm. Nó trả về 0 trong trường hợp ngày đầu tiên không hoàn toàn trước ngày thứ hai.

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;

Ví dụ:

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

Để có được số ngày ngoại trừ các ngày cuối tuần đầy đủ, chỉ cần trừ số ngày từ hàm trên:

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. Lỗi postgres trong chèn hàng loạt:quan hệ hibernate_sequence không tồn tại vị trí 17

  2. Nhóm người dùng PostgreSQL NL

  3. Đếm theo ngày sớm nhất được tìm thấy từ một liên kết bên trong?

  4. SpringBoot + Kotlin + Postgres và JSONB:org.hibernate.MappingException:Không có ánh xạ phương ngữ cho loại JDBC

  5. Sự cố khi truy xuất bản ghi có mảng trống