sql – 选择日期范围在另一个日期范围内的行

我有一个帐户表,其中包含开始日期和结束日期的列.我希望用户提供开始日期和结束日期,并且必须在用户指定的开始日期和结束日期之间的任何时间返回帐户处于活动状态的所有数据.

问题是如果帐户当前仍处于活动状态,则结束日期可能为空.

如果帐户在用户指定范围之间的任何时间打开,则必须选择该帐户,这意味着必须包括在该范围之间打开或关闭的帐户.

这是我想要的图片.

黄色部分是用户输入的日期范围.绿色部分是我想要的选择.浅红色部分是我不想要的选择. G,H和I末尾的箭头表示这些帐户没有结束日期.所有其他没有箭头的人都有结束日期.

最佳答案
因此,这相当于检查帐户开始日期是否在用户提供的结束日期之前,帐户结束日期是在用户提供的开始日期之后(或者为空,在这种情况下我们甚至不需要检查它):

where
    account.start_date < @user_end_date and
    (account.end_date >= @user_start_date or account.end_date is null)

转载注明原文:sql – 选择日期范围在另一个日期范围内的行 - 代码日志