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

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.mrgr.cn/news/70298.html

相关文章:

  • 探索美赛:从准备到挑战的详细指南
  • Spring 解析xml中的 BeanDefination 大概过程
  • Linux故障排查中常用的命令
  • 力扣 LeetCode 206. 反转链表(Day2:链表)
  • Vue.js:构建现代 Web 应用的强大框架
  • 物联网技术及其在智慧城市中的应用
  • 因为我不停地“抄”爆款选题,终于月入5万
  • 叉车倒车防撞预警系统:保障生产效率和员工安全
  • 2-UML概念模型测试
  • Elasticsearch实战应用:从入门到精通
  • C++网络编程之IO多路复用(三)
  • 丹摩征文活动|快速上手 CogVideoX-2b:智谱清影 6 秒视频生成部署教程
  • Python和Geopandas进行地理数据可视化的实用指南
  • 如何对公司的打印进行记录?打印机打印记录的3个自查小妙招,手把手教会你!
  • MySQL面试必杀技!不会这些,面试官都要哭了,你还想找工作?
  • 【NOIP普及组】摆花
  • 【LeetCode】每日一题 2024_11_11 切棍子的最小成本(区间 DP,记忆化搜索)
  • 堆排序,学习笔记
  • EHOME视频平台EasyCVR宇视设备视频平台1000路监控ip地址如何规划?
  • 期权懂|国内期货期权交易有门槛吗?
  • mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因
  • Ubuntu 的 ROS2 操作系统turtlebot3环境搭建
  • 内网环境,基于k8s docer 自动发包
  • 【c++笔试强训】(第三篇)
  • .wslconfig:6 中的未知密钥 ‘boot.systemd‘ 问题解决
  • 机器学习——特征工程、正则化、强化学习