Sql 选择日期范围在其他日期范围内的行

Sql 选择日期范围在其他日期范围内的行,sql,sql-server,Sql,Sql Server,我有一个帐户表,其中有开始日期和结束日期列。我希望用户提供开始日期和结束日期,并且必须在用户指定的开始日期和结束日期之间的任何时间返回帐户处于活动状态的所有数据 问题是,如果帐户当前仍处于活动状态,则结束日期可能为空 如果帐户在用户指定范围内的任何时间打开,则必须选择该帐户,这意味着必须包括在该范围内打开或关闭的帐户 这是我想要的照片 黄色部分是用户输入的日期范围。绿色部分是我想要选择的。浅红色部分是我不希望选中的部分。G,H结尾的箭头,我的意思是这些账户没有结束日期。所有其他没有箭头的帐户都

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

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

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

这是我想要的照片


黄色部分是用户输入的日期范围。绿色部分是我想要选择的。浅红色部分是我不希望选中的部分。G,H结尾的箭头,我的意思是这些账户没有结束日期。所有其他没有箭头的帐户都有一个结束日期。

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

在哪里
account.start\u date<@user\u end\u date和
(account.end\u date>=@user\u start\u date或account.end\u date为空)
选择*
来自帐户
其中开始日期=@input\U start\U date或(结束日期为空,现在()>=@input\U start\U date))
选择
*
从…起
账户
哪里
(开始日期>=:用户提供的开始日期=:用户提供的结束日期
where
    account.start_date < @user_end_date and
    (account.end_date >= @user_start_date or account.end_date is null)
SELECT  *
FROM    accounts
WHERE   start_date <= @input_end_date
        AND (end_date >= @input_start_date OR (end_date IS NULL AND NOW() >= @input_start_date))
SELECT
    *
FROM
    accounts
WHERE
    (start_date >= :user_supplied_start AND start_date <= :user_supplied_end)
OR
    (end_date >= :user_supplied_end AND end_date <= :user_supplied_start)
OR
    (start_date <= :user_supplied_start AND end_date IS NULL)