SQL - 返回日期为日期或日期加动态天数的行

时间:2011-11-23 11:42:25

标签: sql

好吧标题不是很好帮助我很抱歉,但这正是我想要做的。

我有一个Event表,其中包含EventDateFrom日期字段和NumberOfDays int字段。

用户选择一个日期,我需要返回该日期事件发生的行。

所以说2011年11月16日的EventDateFrom有一个活动,NumberOfDays是4(即活动持续4天),用户选择2011年11月17日的日期,它应该返回此活动。

这就是我的尝试:

SELECT Path FROM Events WHERE
(
EventDateFrom >= '2011/11/17 00:00:00' --the date selected by the user
)
and
(
Events.EventDateFrom <= DATEADD(D,NumberOfDays,EventDateFrom)
)

但它只返回17日或之后的所有内容

我有点理解为什么它会在日期之后返回所有内容,但是我不明白我应该怎么做,我所知道的就是我做错的方式

非常感谢您的帮助

4 个答案:

答案 0 :(得分:2)

SELECT Path FROM Events WHERE
'2011/11/17 00:00:00' BETWEEN EventDateFrom AND DATEADD(D,NumberOfDays,EventDateFrom)

编辑 - 根据评论:

SELECT 
Path, 
eventdatefrom, 
NumberOfDays 
FROM Events 
WHERE '2011/11/17 00:00:00' BETWEEN 
      EventDateFrom AND 
      (select case when NumberOfDays = 0 then DATEADD(D,NumberOfDays,EventDateFrom) else DATEADD(D,NumberOfDays-1,EventDateFrom) end) 

答案 1 :(得分:1)

我想你需要:

SELECT Path FROM Events 
WHERE
    EventDateFrom >= '2011-11-17'    --- the date selected by the user
  AND 
    '2011-11-17' < DATEADD(D, NumberOfDays, EventDateFrom)

             --- ^ --- notice the "<", not "<=" here, so you have only dates 
                   --- from '2011-11-16 00:00:00' up to '2011-11-19 23:59:59'

答案 2 :(得分:0)

已经如此接近 - 试试:

SELECT Path FROM Events WHERE
(
EventDateFrom <= '2011/11/17 00:00:00' --the date selected by the user
)
and
(
'2011/11/17 00:00:00' <= DATEADD(D,NumberOfDays-1,EventDateFrom)
)

答案 3 :(得分:0)

示例工作查询

http://data.stackexchange.com/stackoverflow/q/118889/sql-return-rows-where-date-is-given-date-or-date-plus-dynamic-days

查询

SELECT Path
FROM #Events
WHERE EventDateFrom <= '2011/11/17 00:00:00'
AND DATEADD(day,NumberOfDays,EventDateFrom) >= '2011/11/17 00:00:00'