LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

两个时间段比较的六种情况,以及交集、并集、补集简要sql语句示例

freeflydom
2025年1月13日 11:21 本文热度 35

〇、两时间段比较的全部情况

总共有如下图中的六种情况:

下文将根据这六种情况进一步操作。

注意,图中说的动态和固定两时间段,就是两个普通时间段,不区分主次,仅用作帮助理解。

一、判断两个时间段是否有交叉(交集)

正常情况下,就是图中的 2、3、4、5 四种有交叉的情况。如果直接通过这四种情况判断的话,就需要四个判断条件组合,过于复杂,本文略过。

如果通过逆向思维的话,就只需要判断 1、6 两种情况。当然推荐使用逆向思维,判断的情况比较少,也易于理解,下边详细介绍下。

判断两时间段不交叉的条件


-- 动态结束时间 < 固定开始时间

jieshusj_dt < kaishisj_gd -- 情况 1

or

kaishisj_dt > jieshusj_gd -- 情况 6

-- 动态开始时间 > 固定结束时间

那么,就可以通过取反,得到两时间段有交叉的条件


-- 动态结束时间 >= 固定开始时间

jieshusj_dt >= kaishisj_gd

and

kaishisj_dt <= jieshusj_gd

-- 动态开始时间 <= 固定结束时间

二、取两个时间段的交叉部分(交集)

前提条件:通过了有交叉判断。也就是包含 2、3、4、5 四种情况。

然后,就需要分别比较两个时间段的开始时间和结束时间:

  • 开始时间:取较大的那一个;

  • 结束时间:取较小的那一个。


-- 动态时间段示例:2024-10-16 ~ 2024-10-20

select

-- 开始时间取较大的

(Case When kaishisj_gd > '2024-10-16' Then kaishisj_gd Else '2024-10-16' End) kaishisj,

-- 结束时间取较小的

(Case When jieshusj_gd < '2024-10-20' Then jieshusj_gd Else '2024-10-20' End) jieshusj

from table_name

三、取两个时间段并集

取并集也需要分两种情况,就是是否有交叉。

  • 第一种:无交叉

直接将两个时间段进行‘或’运算即可。

  • 第二种:有交叉

此种情况也是分别比较两个时间段的开始时间和结束时间,但是取值和上一章节中刚好相反,:

  • 开始时间:取较小的那一个;

  • 结束时间:取较大的那一个。


-- 动态时间段示例:2024-10-16 ~ 2024-10-20

select

-- 开始时间取较小的

(Case When kaishisj_gd > '2024-10-16' Then '2024-10-16' Else kaishisj_gd End) kaishisj,

-- 结束时间取较大的

(Case When jieshusj_gd < '2024-10-20' Then '2024-10-20' Else jieshusj_gd End) jieshusj

from table_name

四、取两个时间段的补集

首先,什么是补集?简单的示意图如下:

(其中,全集‘集合 B’包含‘集合 A’,那么图中灰色部分就是‘集合 A’的补集

所以,求补集的前提条件就是两个时间段的有包含关系,也就是情况 3、4。

  • 情况 3:


-- 动态时间段示例:2024-10-16 ~ 2024-10-20

select

kaishisj_gd,'2024-10-16' as jieshusj_new, -- 两个时间,组成新的时间段

'2024-10-20' as kaishisj_new,jieshusj_gd  -- 两个时间,组成新的时间段

from table_name

where kaishisj_gd < '2024-10-16' and jieshusj_gd > '2024-10-20'

如上边的查询语句,可以得到四个时间,分别组成两个时间段,再进行后续个性化操作。

  • 情况 4:


-- 动态时间段示例:2024-10-16 ~ 2024-10-20

select

'2024-10-16' as kaishisj_new, kaishisj_gd, -- 两个时间,组成新的时间段

jieshusj_gd, '2024-10-20' as jiehsusj_new  -- 两个时间,组成新的时间段

from table_name

where kaishisj_gd > '2024-10-16' and jieshusj_gd < '2024-10-20'

如上边的查询语句,可以得到四个时间,分别组成两个时间段,再进行后续个性化操作。

转自https://www.cnblogs.com/hnzhengfy/p/18471566/DataStructure_TimeInterval


该文章在 2025/1/13 11:23:09 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved