SQL 'overlaps' 仅获取开始和结束之间的日期(不包括开始和结束日期)

Posted

技术标签:

【中文标题】SQL \'overlaps\' 仅获取开始和结束之间的日期(不包括开始和结束日期)【英文标题】:SQL 'overlaps' only get dates between start and end (not include start and end dates)SQL 'overlaps' 仅获取开始和结束之间的日期(不包括开始和结束日期) 【发布时间】:2011-07-10 05:01:52 【问题描述】:

我使用此查询来获取与“start_date”和“end_date”之间的时间段重叠的对象,此外,我想获取日期为end的对象开始日期,对象开始日期结束

我用

where("(start_date, end_date) overlaps (date ?, date ?), start_date, end_date"

但对象有日期>=end_date得到。

这种“重叠”只获取具有日期start_date的对象,而不是“=”。

例如,start_date='2011/2/1',end_date='2011/3/31'。对象的日期结束于“2011/2/1”或开始于“2011/3/31”将不会被获取,只有“2011/2/1”和“2011/3/31”之间的日期会被获取。如何包含保存日期在 start_date 结束并在 end_date 开始的对象?

----------编辑---------- --------

我尝试使用:

where("(start_date, end_date) overlaps (date ?, date ?), start_date-1.day, end_date+1.day"

解决这个问题,但是当我像上面那样做时,如果 start_date='2011/2/1', end_date='2011/3/31',那么对象持有 '2011/1/31' 也返回这是应该不应该得到。

【问题讨论】:

【参考方案1】:

在 SQL 方面,假设您想要生成这样的东西

S1, E1 是开始和结束日期 第一个范围, S2, E2 是开始和结束日期 第二个范围,

S1、E1、S2、E2 都不是 NULL

哪里(S1,E1)重叠(S2,E2)或(E1 = S2)或(E2 = S1)

你需要两个“OR”子句,因为在一般情况下你不知道哪个范围更早。

【讨论】:

【参考方案2】:

试试这个:

where("start_date >= ? and end_date <= ?", start_date.beginning_of_day, end_date.end_of_day)

应该包括从 start_date 到 end_date 的所有内容;-) 希望对您有所帮助!

【讨论】:

你没有得到你想要的日期范围? 如果设置 start_date='2011/2/1',我想要的是对象保存日期从 '2011/1/1' 到 '2011/2/1' 将返回和 end_date='2011/3/31' ,这就是我使用“重叠”的原因 我的英语表达不好,对不起。问题是“重叠”不包括日期在 start_date 结束且对象在 end_date 开始的对象。我尝试通过使用 start_date-1.day 和 end_day+1.day 来解决它,但它也返回带有 start_date-2.day 的对象。 不,这是我的错,无论如何,您可能可以使用与我相同的方式,因为您不使用 start_date - 1.day 和 end_date + 1.day,但您使用 start_date.beginning_of_day , 而 end_date.end_of_date 代替。它应该工作=)【参考方案3】:

假设一个表格详细信息并具有属性(包括日期),假设我想要从 start_date 到 end_date 两个特定日期的信息。

所以, 详细信息。where(["date between ? and ?",start_date,end_date]) 将提供所需的信息,包括开始和结束日期。希望对您有所帮助

【讨论】:

谢谢,但是,我想要的不是从确切的时间段获取对象。如果我设置 start_date='2011/2/1' 和 end_date='2011/ 3/31' 在查询中,这就是我使用 'Overlaps' 的原因

以上是关于SQL 'overlaps' 仅获取开始和结束之间的日期(不包括开始和结束日期)的主要内容,如果未能解决你的问题,请参考以下文章

获取开始日期和结束日期之间的日期

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期

基于日期获取所有日期 - sql

从sql server获取两个日期之间的数据

如何在 oracle sql 中提取两个日期之间的天数?

Dom笔记