当前位置: 首页 > article >正文

PostgreSQL 计算两个时间之间的日期差

需求:有两个时间,现在想计算两个时间之间相差了多少天,并且如果遇到时间中间有周末则减去 2 天,如果时间之间有一个是周末则减去一天。
WITH date_range AS (
    SELECT
        '2023-12-20 10:00:00'::TIMESTAMP AS start_date,
        '2023-12-28 09:00:00'::TIMESTAMP AS end_date
)
SELECT
    start_date::DATE AS start_date,
    end_date::DATE AS end_date,
    end_date::DATE - start_date::DATE + 1 AS total_days,
    CASE
        WHEN EXTRACT(ISODOW FROM start_date) = 6 THEN end_date::DATE - start_date::DATE + 1 - 2  -- 如果开始日期是周六,减去 2 天
        WHEN EXTRACT(ISODOW FROM start_date) = 7 THEN end_date::DATE - start_date::DATE + 1 - 1  -- 如果开始日期是周日,减去 1 天
        ELSE
            end_date::DATE - start_date::DATE + 1 -
            (SELECT COUNT(*)
             FROM generate_series(start_date::DATE, end_date::DATE, '1 day') AS dates
             WHERE EXTRACT(ISODOW FROM dates) IN (6, 7))  -- 减去周末的天数
    END AS adjusted_days
FROM date_range;


http://www.kler.cn/a/395127.html

相关文章:

  • QTcpSocket 服务端和客户端
  • Python入门(4)--流程控制(下)
  • 【视觉SLAM】1-概述
  • MyBatis——增删查改(XML 方式)
  • FluentUI使用
  • 深入探索:Scrapy深度爬取策略与实践
  • Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件
  • NeRF在农业领域的应用-------------(1)
  • 深入理解ElasticSearch分词器:详解各种分词器的原理与应用
  • 鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
  • Spring——原理:IoC
  • FileLink跨网文件安全摆渡系统——企业数据流转的安全桥梁
  • 软件工程笔记二—— 软件生存期模型
  • 服务器上安装Orcale数据库以及PL SQL工具(中文)
  • /// ts中的三斜线指令 | 前端
  • OpenJudge_ 简单英文题_04:0/1 Knapsack
  • 高级java每日一道面试题-2024年11月04日-Redis篇-Redis如何做内存优化?
  • Ubuntu 20.04 配置开发环境(持续更新)
  • MySQL中字段类型和Java对象中的数据类型对应关系
  • 【3D Slicer】的小白入门使用指南三
  • 31.校园志愿者管理系统(基于springboot和vue的Java项目)
  • 【网络安全 | 身份授权】一文讲清OAuth
  • 3. JVM 发展历程
  • 24.11.10 css
  • 初遇Python-----python/anaconda/PyCharm安装应用问题
  • 算法训练(leetcode)二刷第二十六天 | *452. 用最少数量的箭引爆气球、435. 无重叠区间、*763. 划分字母区间