【问题标题】:Select all the clients that are in the hotel between two dates knowing tha date of arrival and departue选择知道到达和离开日期的两个日期之间在酒店的所有客户
【发布时间】:2019-10-18 08:19:14
【问题描述】:

我有一张客户表,上面有客户到达的日期和客户离开的日期。

我想选择哪些客户在 2019 年 10 月 18 日至 2019 年 10 月 22 日之间至少入住一天。 例如: 我有:

Client Arrive      Depart
1      16-10-2019  18-10-2019
2      16-10-2019  17-10-2019
3      21-10-2019  30-10-2019

我想要:

Client Arrive      Depart
1      16-10-2019  18-10-2019
3      21-10-2019  30-10-2019

我试过这个: 从 cl_Arrive 介于“18/10/2019”和“22/10/2019”之间的客户中选择 *

但是像这样我没有考虑出发日期。

【问题讨论】:

  • 让帮助您成为可能:minimal reproducible example.
  • 您使用的是哪个 dbms? (在日期/时间方面,许多产品远不符合 ANSI SQL。)
  • 这个问题似乎根本没有包括任何解决问题的尝试。请编辑问题以显示您尝试过的内容,并使用Minimal, Complete, and Verifiable example 显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask
  • 使用 Postgres 就像 where daterange(arrive, depart, '[]') && daterange(date '2019-10-2019', date '2019-10-22', '[]') 一样简单——您使用的是哪个 DBMS 产品?

标签: sql date select


【解决方案1】:

您正在寻找日期目标范围重叠的酒店。为此,您可以使用以下条件:

arrive <= :EndDate and depart >= :StartDate

在您的示例中,:StartDate 是 18-10-2019,:EndDate 是 22-10-2019。

这些条件通常会出现在查询的 where 子句中:

select *
from mytable
where arrive <= @EndDate and depart >= @StartDate

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2015-10-06
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多