如何在SQL Server 2012中通过两列搜索日期

如何在SQL Server 2012中通过两列搜索日期,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,假设我有一张这样的桌子: Event (eventID, StartDateTime, EndDateTime) StartDateTime是datetime数据类型 EndDateTime是datetime数据类型 现在,示例数据可以是这样的: EventID StartDateTime EndDateTime ----------------------------------------------------------- 1 2014-

假设我有一张这样的桌子:

Event (eventID, StartDateTime, EndDateTime)
  • StartDateTime
    datetime
    数据类型
  • EndDateTime
    datetime
    数据类型
现在,示例数据可以是这样的:

EventID   StartDateTime             EndDateTime
-----------------------------------------------------------
   1      2014-02-21 00:00:00.000   2014-02-23 23:59:59.000
   2      2014-02-22 00:00:00.000   2014-02-24 23:59:59.000
我想搜索在
2014-02-23 00:00:00.000发生的事件

SELECT
*
FROM
    Event
WHERE
    (StartDateTime <= '2/23/2013 00:00:00 AM')
    OR (EndDateTime >= '2/23/2013 00:00:00 AM')
选择
*
从…起
事件
哪里
(StartDateTime='2013年2月23日00:00:00 AM')
我已经尝试了上面的代码,但它没有返回正确的结果

我错过什么了吗?您能告诉我缺少什么吗?

在WHERE子句中使用运算符。它指定要测试的范围

  • BETWEEN运算符包括边界情况

    如果test_表达式的值大于或等于begin_表达式的值且小于或等于end_表达式的值,则BETWEEN返回TRUE

在WHERE子句中使用运算符。它指定要测试的范围

  • BETWEEN运算符包括边界情况

    如果test_表达式的值大于或等于begin_表达式的值且小于或等于end_表达式的值,则BETWEEN返回TRUE

您是否尝试过中间人

DECLARE @EventTime DATETIME
SET @EventTime = '20140223 00:00:00'

SELECT * 
FROM EVENT
WHERE @EventTime BETWEEN StartDateTime AND EndDateTime
你试过中间人吗

DECLARE @EventTime DATETIME
SET @EventTime = '20140223 00:00:00'

SELECT * 
FROM EVENT
WHERE @EventTime BETWEEN StartDateTime AND EndDateTime
使用此查询

SELECT * FROM Event
     WHERE '2014-02-23 00:00:00.000' BETWEEN StartDateTime and EndDateTime
使用此查询

SELECT * FROM Event
     WHERE '2014-02-23 00:00:00.000' BETWEEN StartDateTime and EndDateTime

您不需要
,您需要
。您希望事件在指定日期之前或当天开始,并在指定日期之后结束:

SELECT
*
FROM
    Event
WHERE
    StartDateTime <= '20130223'
    AND
    EndDateTime > '20130223'

它的优点是,它不会(任意地)像您当前的范围那样排除一天中的最后一分钟。

您不需要
,您需要
。您希望事件在指定日期之前或当天开始,并在指定日期之后结束:

SELECT
*
FROM
    Event
WHERE
    StartDateTime <= '20130223'
    AND
    EndDateTime > '20130223'

这样做的好处是,它不会(任意地)排除一天中的最后一分钟,就像您当前的范围一样。

从StartTime和enddatetime之间的“2013年2月23日00:00:00 AM”不能正确执行的事件中选择*?您可能需要在enddate中添加一点,因为如果我记得很清楚,它不包括从startdatime和enddatetime之间的“2013年2月23日00:00:00 AM”事件中选择*,这样做不正确?您可能需要在结束日期上添加一点内容,因为如果我记得很清楚,它不包括在内,因此不会返回任何内容!尝试设置@EventTime='20130223 00:00:00'您的示例数据包含2014的条目。。。尝试设置@EventTime='20140223 00:00:00';-)不归还任何东西!尝试设置@EventTime='20130223 00:00:00'您的示例数据包含2014的条目。。。尝试设置@EventTime='20140223 00:00:00';-)如何在sql server 2012中将“2014-02-21 00:00:00.000”转换为20140221?如何在sql server 2012中将“2014-02-21 00:00:00.000”转换为20140221?