返回用户输入日期之前用户输入时间间隔内的所有记录

Posted

技术标签:

【中文标题】返回用户输入日期之前用户输入时间间隔内的所有记录【英文标题】:return all records within user input interval before user input date 【发布时间】:2014-10-07 18:37:05 【问题描述】:

我需要返回日期在用户输入日期之前指定时间内的所有记录(很可能是一周,但可以是任何时间),我试过了,但它似乎不起作用:

     where T.postdate >= DateADD(day, @Length, @StartDate)

其中@Length 和@StartDate 是用户在存储过程中输入的,但它的返回日期是几个月前的......

【问题讨论】:

“几个月前” - 几个月从何而来? 我有这个:where T.postdate 试试这个:T.postdate >= DateADD(day, -7, '2014-10-7') 带引号,否则 2014 - 10 -7=1997 是数学表达式,而不是日期 @user3825831 您的评论“where T.postdate 【参考方案1】:

如果我理解正确,你可以这样做:

http://sqlfiddle.com/#!6/7241b/4

create table test (someDate datetime)
insert into test (someDate)
select '2014-01-01'
union all select '2014-02-01'
union all select '2014-03-01'
union all select '2014-04-01'
union all select '2014-05-01'
union all select '2014-06-01'
union all select '2014-07-01'
union all select '2014-08-01'
union all select '2014-09-01'
union all select '2014-10-01'
union all select '2014-10-02'
union all select '2014-10-03'
union all select '2014-10-04'
union all select '2014-10-05'
union all select '2014-10-06'
union all select '2014-10-07'
union all select '2014-10-08'
union all select '2014-10-09'
union all select '2014-10-10'
union all select '2014-10-11'

declare @lengthInDays int, @startDate datetime

select @lengthInDays=5, @startDate='2014-10-02'

select *
from test
-- where "somedate" is after the start date minus the number of days input
where someDate >= dateadd(day, -@lengthInDays, @startDate) 
-- and where the "someDate" is not greater than the date input
and someDate < @startDate

此实例中仅返回结果为2010-10-01,因为它在@startDate 和@startDate 之前的 5 天之间

【讨论】:

【参考方案2】:
Try this.
WHERE T.postdate >= DATEADD(week, -@Length, @StartDate)

【讨论】:

以上是关于返回用户输入日期之前用户输入时间间隔内的所有记录的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 返回日期内的所有记录

使用用户通过winform输入从SQL Server获取日期[关闭]

Prompt box是什么?它的返回值有什么用?

在jquery中禁用当前日期之前的日期并且输入在用户控件中并且用户控件在更新面板中

c语言 输入某年某月某日(两次),计算两次输入日期的间隔

如何使用 pd.to_datetime 从用户输入的未来日期中检索日期