将两个日期与SQL Server中的另外两个日期进行比较

时间:2014-11-12 05:52:56

标签: sql-server date

我希望使用SQL Server 2008 R2FromDate以及另外2个用户输入日期来过滤来自ToDate的数据。我想要查询。

我希望过滤数据,如果用户输入2个日期或它们之间的任何日期位于FromDate或'ToDate'或日期之间然后它过滤数据。

对于即

 FromDate             ToDate
15-11-2014          20-11-2014

如果用户输入日期为11-11-201420-12-2014。这意味着在这2个日期的日期之间位于FromDateToDate之间,因此它应该返回此记录。

现在,如果用户输入日期为11-11-201414-11-2014。这意味着在这2个日期之间的日期不在FromDateToDate之间,因此不应该返回此记录。

它必须与给定日期以及日期之间相匹配。

3 个答案:

答案 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

希望完全能帮到你:)。

相关问题