如何确定一个日期范围是否出现在另一个日期范围内的任何时间?

2024-05-08

我有一个事件表,指定日期范围start_date and end_date字段。我有另一个在代码中指定的日期范围,它将当前周定义为“week_start”和“week_end”。

我想查询本周的所有活动。这些案例似乎是:

  • 活动在一周内开始和结束
  • 活动在本周之前开始,但在本周内结束
  • 活动在一周内开始,但在一周后结束
  • 活动在周前开始,也在周后结束
  • 既不在一周内也不与一周重叠的事件将被忽略

我正在尝试提出一个可以处理所有这些情况的查询。到目前为止,我只能得到处理每周重叠的案例,或者完全内部的事件;本质上,记录太多,或者根本没有。


(event.start BETWEEN week.start AND week.end)
OR
(week.start BETWEEN event.start AND event.end)

简单来说,要么一周在事件期间开始,要么事件在一周内开始。

让我们检查一下:

活动在一周内开始和结束

该活动在一周内开始。

活动在本周之前开始,但在本周内结束

一周从活动期间开始。

活动在一周内开始,但在一周后结束

该活动在一周内开始。

活动在周前开始,也在周后结束

一周从活动期间开始。

注意BETWEEN在上面的表达式中使用只是为了简洁。

严格的表达是这样的:

(event.start >= week.start AND event.start < week.end)
OR
(week.start >= event.start AND week.start < event.end)

,前提是week.end is a week.start + INTERVAL 7 DAY.

IE。如果你的一周开始于Sun, 0:00:00,那么它应该结束于next Sun, 0:00:00(不开Sat, 0:00:00)

这个表达式看起来比常用的更复杂:

event.start < week.end AND event.end > week.start

,但前者更高效且索引友好。

请参阅我的博客中的这些文章以进行性能比较:

  • 重叠范围:SQL Server http://explainextended.com/2009/06/30/overlapping-ranges-sql-server/
  • 重叠范围:MySQL http://explainextended.com/2009/07/01/overlapping-ranges-mysql/
  • 重叠范围:Oracle http://explainextended.com/2009/07/02/overlapping-ranges-oracle/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定一个日期范围是否出现在另一个日期范围内的任何时间? 的相关文章

  • 将带有时区的 Joda-Time `DateTime` 转换为没有时区的 DateTime?

    Given a DateTime http www joda org joda time apidocs org joda time DateTime html例如2015 07 09T05 10 00 02 00 using 乔达时间 h
  • 将 DateTime.MinValue 转换为 DateTimeOffset

    我正在尝试将 DateTime MinValue 转换为 DateTimeOffset 值 但收到 ArgumentOutOfRange 异常 我正在看有关 DateTime 到 DateTimeOffset 隐式转换的 MSDN 文章 h
  • 如何设计具有主键和多值属性的表?

    我对数据库设计很感兴趣 现在正在阅读相应的文献 通过这本书 我遇到了一个让我感到不确定的奇怪例子 有一个关系 在此表中 我们有一个复合主键 StudentID Activity 但ActivityFee部分依赖于表的key Activity
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • 2 同一个表的同一列上的 PostgreSQL 索引 - 冗余吗?

    我有一个带有 2 个索引的 PostgreSQL 表 其中一项指数涵盖website id and tweet idcolumns 是唯一的 B 树索引 第二个索引仅涵盖website id列 并且是非唯一索引 如果第一个索引存在 第二个索
  • 使用 mongoose 更新 mongoDb 中数组内的对象[重复]

    这个问题在这里已经有答案了 我正在 MongoDB 上工作 以更新 MongoDB 集合中数组内部的对象值 我的收藏就像 id ObjectId 59b7e839200a5c00ee2d2851 player New playesList
  • 不使用 Django 的 Python 数据库(适用于 Heroku)

    令我惊讶的是 我没有发现其他地方提出过这个问题 简而言之 我正在编写一个应用程序 计划部署到云 可能使用 Heroku 它将执行各种网络抓取和数据收集 它将位于云中的原因是 我可以将其设置为每天自行运行 并将数据提取到数据库 而无需我的计算
  • 分配给 SQLite 内存数据库的内存大小

    如果使用下面的语法创建一个内存中的sqlite数据库 那么分配给它的最大内存大小是多少 my dbh DBI gt connect dbi SQLite dbname memory 如果内存数据库的大小大于最大可用内存 将会发生什么情况 假
  • 如何在 Python 中找到从周日开始的周数?

    对于 Python 来说 完全是新手 所以如果这是显而易见的 请提前道歉 我有许多日期时间值 我想为其标识年数和周数 例如 start date datetime datetime 2015 1 26 0 0 0 问题是 我希望将一周定义为
  • 动态连接字符串数据库C#

    我总是使用这行代码进行连接 string ConnectString datasource mysource username myusername password mypassword database mydatabasename 这
  • 将数据库表转换为 XML 模式文件

    我正在使用 SQL Server 2005 是否有任何命令或 GUI 工具 例如 SQL Server Management Studio 中的任何菜单 功能 可以将数据库表转换为 XML 架构文件 xsd 提前致谢 乔治 我找到了这个 试
  • 直接从表中选择和视图之间的区别

    直接从表中选择数据或从视图中选择数据有什么区别 每一种的最佳用途是什么 根据微软的说法 如果你使用的话会有性能优势indexedSQL Server 2000 2005 2008 中的视图 索引视图可以通过以下方式提高查询性能1 可以预先计
  • 通过网络恢复数据库备份

    如何通过网络使用 SQL Server 2005 恢复数据库备份 我记得以前这样做过 但这样做的方式有些奇怪 您几乎没有选择使用网络文件作为备份源 在与 MS SQL Server 相同的用户下映射网络驱动器 路径 托管文件 使用 xp c
  • 如何使用Oracle在日期和时间之间添加字母“T”?

    我想使用 oracle 在日期和时间之间添加字母 T 像这样 2015 01 01T00 00 00 日期脚本 to char l date generated yyyy mm dd hh24 mi ss 甲骨文文档 http docs o
  • 在 LINQ 中确定具有分钟精度的日期时间值的相等性

    我需要使用分钟精度比较两个日期时间值以确定相等 完全相同 这是最好的方法吗 我的日期可能有秒和毫秒 但我只想考虑到分钟 where Math Abs datetime1 Subtract datetime2 TotalMinutes 0 检
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • oracle lag 函数与 group by

    我有一个查询忽略从前一个值增加的值 例如 采用下表 col1 col2 col3 5 1 A 4 2 A 6 3 A 9 4 B 8 5 B 10 6 B 现在进行以下查询 select col1 from select col1 lag
  • 在单个语句中交换三个数字

    是否有可能在一个语句中交换三个数字 Eg a 10 b 20 c 30 我希望按照以下列表更改值 a 20 b 30 c 10 这些值可以在一行中传输吗 python gt gt gt a b c 10 20 30 gt gt gt pri
  • 从服务器获取当前日期时间并将其转换为 C# 中的本地时间

    帮助 我有一台服务器 其运行时间为 GMT 07 00 我的当地时间是 GMT 05 30 小时 我需要从服务器获取当前日期和时间 并将该日期和时间转换为我的当地时间 我已经尝试了很多代码 但仍然没有找到连续的方法来做到这一点 有人可以帮我
  • 调整 Oracle 数据库以加快启动速度(闪回)

    我正在使用 Oracle 数据库 11 2 我有一个场景 我发出FLASHBACK DATABASE经常 似乎有一个FLASHBACK DATABASECycle 会重新启动数据库实例 大约需要 1 分钟 我的设置花了 7 秒 数据库很小

随机推荐