转换的开始日期为datetime的日期和结束日期的开始到结束的一天

转换的开始日期为datetime的日期和结束日期的开始到结束的一天

问题描述:

Store PROCEDURE 

--para-- 
    @StartingDate DateTime = NULL, 
    @EndingDate  DateTime = NULL 

--condition -- 

    dbo.callentry.CallDateTime BETWEEN ISNULL(@StartingDate, 
dbo.callentry.CallDateTime) and ISNULL(@EndingDate,dbo.callentry.CallDateTime) 

问:转换的开始日期为datetime的日期和结束日期的开始到结束的一天

当我通过日期'2012-09-17'从日期选择器如对@StartingDate,和同为结束日期。它是比较2012-09-17 00:00:00.000 to 2012-09-17 00:00:00.000 - 将返回任何记录

我要的是在全天记录2012年9月17日

+0

使用完整的日期**时间** - 即“2012-09-17 00:00:00”和“2012-09-17 23:59:59”。 – Tim 2013-04-29 05:03:34

试试这个:

dbo.callentry.CallDateTime >=ISNULL(@StartingDate, 
dbo.callentry.CallDateTime) and dbo.callentry.CallDateTime <=ISNULL(@EndingDate,dbo.callentry.CallDateTime) 

还要确保dbo.callentry.CallDateTime此列的数据类型也是日期时间

OR

而且从你的问题阅读。我认为当strt和结束日期相同时,你只需要那天的所有记录。如果开始和结束日期是相同的,为什么不能你刚才使用如下:

convert(date,dbo.callentry.CallDateTime) =convert(date,ISNULL(@StartingDate, 
    dbo.callentry.CallDateTime)) 

在SQL Server 2008的情况下,若跌破只是转换的两侧,只是日期格式annd比较

+0

“convert both双方约会格式和比较“ - 工作!谢谢 ! – 2013-04-29 05:28:03

为什么不直接使用@StartingDate-1呢?

甚至DATEADD(d,-1,@StartingDate)

或者@EndDate + 1

甚至DATEADD(d,1,@EndDate)

DATEADD (Transact-SQL)

返回指定日期与指定数目的时间间隔(带符号的 整数)加入指定日期部分那天。

+1

在这种情况下不会返回2天的数据? – AnandPhadke 2013-04-29 05:05:21

+0

它不会返回2天的数据;它将返回一整天的数据以及任何记录,其中包含一天之后和午夜之间的日期。要忽略这些,你可以重构使用两个单独的WHERE子句而不是BETWEEN:'AND dbo.callentry.CallDateTime 2013-04-29 09:15:43