2013-04-29 173 views
1
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

回答

0

試試這個:

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

1

爲什麼不直接使用@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 <= ISNULL(DATEADD(d,1,@ EndDate),dbo.callentry.CallDateTime)' – 2013-04-29 09:15:43

相關問題