好吧标题不是很好帮助我很抱歉,但这正是我想要做的。
我有一个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日或之后的所有内容
我有点理解为什么它会在日期之后返回所有内容,但是我不明白我应该怎么做,我所知道的就是我做错的方式
非常感谢您的帮助
答案 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)
示例工作查询
查询
SELECT Path
FROM #Events
WHERE EventDateFrom <= '2011/11/17 00:00:00'
AND DATEADD(day,NumberOfDays,EventDateFrom) >= '2011/11/17 00:00:00'