SQL语句以查找日期是否介于两个日期之间

SQL语句以查找日期是否介于两个日期之间,sql,sql-server,tsql,date,where-clause,Sql,Sql Server,Tsql,Date,Where Clause,使用SQL语句,我想查找一天的条目 考虑以下条目: Id 1,开始于2020-04-12 08:00:00.0000000,结束于2020-04-12 15:00:00.0000000 Id 2,开始于2020-04-11 08:00:00.0000000,结束于2020-04-13 15:00:00.0000000 当我想查找当天的条目时: 2020-04-11,结果应该是:Id 2 2020-04-12,结果应该是:Id 1和Id 2 2020-04-13,结果应该是:Id 2 我尝

使用SQL语句,我想查找一天的条目

考虑以下条目:

  • Id 1,开始于2020-04-12 08:00:00.0000000,结束于2020-04-12 15:00:00.0000000
  • Id 2,开始于2020-04-11 08:00:00.0000000,结束于2020-04-13 15:00:00.0000000
当我想查找当天的条目时:

  • 2020-04-11,结果应该是:Id 2
  • 2020-04-12,结果应该是:Id 1和Id 2
  • 2020-04-13,结果应该是:Id 2
我尝试使用不同的“”运算符和BETWEEN关键字,但无法获得正确的语法,因为这是我想在另一个时间段内找到的时间段。

请考虑:

select count(*)
from mytable
where 
    @mydate >= cast(startAt as date) 
    and @mydate < dateadd(day, 1, cast(endAt as date))
选择计数(*)
从mytable
哪里
@mydate>=强制转换(开始日期为日期)
和@mydate
-您可以使用
@mydate
的值来测试这3种场景。

请考虑:

select count(*)
from mytable
where 
    @mydate >= cast(startAt as date) 
    and @mydate < dateadd(day, 1, cast(endAt as date))
选择计数(*)
从mytable
哪里
@mydate>=强制转换(开始日期为日期)
和@mydate
-您可以使用
@mydate
的值来测试这3种场景。

我想您需要:

where @date <= endAt and
      dateadd(day, 1, @date) > startat
其中@date startat
这将返回任何时间跨度,包括
@日期的任何时间

我想您需要:

where @date <= endAt and
      dateadd(day, 1, @date) > startat
其中@date startat

这将返回任何时间跨度,包括
@日期的任何时间

请使用您正在使用的数据库标记您的问题:sql server、mysql、oracle。。。?日期函数是高度特定于供应商的。当然,我添加了mssql数据库标记,我认为您的第一个结果是错误的;它应该是“2”而不是“1”。您的权利,在示例中更改了,请用您正在使用的数据库标记您的问题:sql server、mysql、oracle。。。?日期函数是高度特定于供应商的。当然,我添加了mssql数据库标记,我认为您的第一个结果是错误的;它应该是“2”而不是“1”。您的权利,在示例中更改了它