假设我有一张这样的表:
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')
我已经尝试了上面的代码,但它没有返回正确的结果。
我错过了什么吗?你能告诉我我错过了什么吗?
答案 0 :(得分:2)
您不希望OR
,您需要AND
。您希望在指定日期之前或之后开始的事件,和在指定日期之后结束:
SELECT
*
FROM
Event
WHERE
StartDateTime <= '20130223'
AND
EndDateTime > '20130223'
另外,如果时间部分很重要,我会认真建议您将这些日期范围作为半开放时间间隔存储,并使用独占结束日期。计算独占端点要容易得多,读得更干净:
INSERT INTO Event(EventID,StartDateTime,EndDateTime) values
(1,'2014-02-21T00:00:00.000','2014-02-24T00:00:00.000'),
(2,'2014-02-22T00:00:00.000','2014-02-25T00:00:00.000')
它的优势在于它不是(任意)排除当天的最后一分钟,就像你当前的范围一样。
答案 1 :(得分:1)
DECLARE @EventTime DATETIME
SET @EventTime = '20140223 00:00:00'
SELECT *
FROM EVENT
WHERE @EventTime BETWEEN StartDateTime AND EndDateTime
答案 2 :(得分:1)
使用此查询
SELECT * FROM Event
WHERE '2014-02-23 00:00:00.000' BETWEEN StartDateTime and EndDateTime
答案 3 :(得分:0)
在WHERE子句中使用Between运算符。它指定了要测试的范围。
注意 BETWEEN 运算符包含边界情况。
如果test_expression的值大于或等于begin_expression的值且小于或等于end_expression的值,则BETWEEN 返回TRUE。