我希望使用SQL Server 2008 R2
和FromDate
以及另外2个用户输入日期来过滤来自ToDate
的数据。我想要查询。
我希望过滤数据,如果用户输入2个日期或它们之间的任何日期位于FromDate
或'ToDate'或日期之间然后它过滤数据。
对于即
FromDate ToDate
15-11-2014 20-11-2014
如果用户输入日期为11-11-2014
和20-12-2014
。这意味着在这2个日期的日期之间位于FromDate
和ToDate
之间,因此它应该返回此记录。
现在,如果用户输入日期为11-11-2014
和14-11-2014
。这意味着在这2个日期之间的日期不在FromDate
和ToDate
之间,因此不应该返回此记录。
它必须与给定日期以及日期之间相匹配。
答案 0 :(得分:1)
你可以用这个:
其中
DATEADD(dd,0,DATEDIFF(dd,0,FromDate))> '15 -11-2014'
和
DATEADD(dd,0,DATEDIFF(dd,0,ToDate))< '20 -11-2014'
答案 1 :(得分:0)
请检查示例,您只需将参数与datetime列进行比较以提取行。
declare @table table(id int,frdt datetime, todt datetime)
insert into @table values (1,GETDATE()-20, GETDATE()-19)
,(1,GETDATE()-9, GETDATE()-8)
,(1,GETDATE()+20, GETDATE()+18)
,(1,GETDATE(), GETDATE()-1)
,(1,GETDATE()-20, GETDATE())
,(1,GETDATE()-10, GETDATE()+10 )
select * from @table
declare @frdt datetime = null , @todt datetime = getdate()-10
select @frdt, @todt,* from @table
where
(@frdt is null or @frdt between frdt and todt)
and
(@todt is null or @todt between frdt and todt)
select @frdt = GETDATE() , @todt = GETDATE()
select @frdt, @todt,* from @table
where
(@frdt is null or @frdt between frdt and todt)
and
(@todt is null or @todt between frdt and todt)
答案 2 :(得分:0)
据我所知,你的问题。
select 'a' A, CONVERT(date,'11/15/2014') FromDate, CONVERT(date, '11/20/2014') ToDate into #Temp
declare @frmDate date;
declare @toDate date;
set @frmDate = Convert(date, '11/11/2014');
set @toDate = CONVERT(Date, '12/20/2014');
select * from #Temp where FromDate>=@frmDate and ToDate<=@toDate
set @frmDate = Convert(date, '11/11/2014');
set @toDate = CONVERT(Date, '11/14/2014');
select * from #Temp where FromDate>=@frmDate and ToDate<=@toDate
希望完全能帮到你:)。