2015-08-22 115 views
0

此代碼不能正常工作之間選擇數據:存儲過程或CTE兩個日期

ALTER PROCEDURE GetReportBetweenTwoDates 
    @DateOne DateTime, 
    @DateTwo DateTime 
AS 
BEGIN 
; 
    SELECT 
     VisitorID, VisitorName, VisitorAddress, 
     ContactNumber, Department, ToMeet, InTime, 
     Purpose, OutTime 
    FROM 
     tbl_visitor 
    WHERE 
     CONVERT(varchar(20), InTime, 110) BETWEEN CONVERT(varchar(20), @DateOne, 110) AND CONVERT(varchar(20), @DateTwo, 110) 
END 
+0

請問您更精確嗎? –

+0

更具體一些,發佈您想要實現的內容,如果您有任何錯誤消息,請編輯該問題幷包含錯誤消息。 – TFrost

回答

1

你的參數是DATETIME,我當然希望你在表InTime列是DATETIME,太,那麼你可以容易只需使用:

WHERE 
    InTime BETWEEN @DateOne AND @DateTwo 

,或者如果您需要擺脫時間部分,使用DATE數據類型:

WHERE 
    CAST(InTime AS DATE) BETWEEN CAST(@DateOne AS DATE) AND CAST(@DateTwo AS DATE) 

停止將日期轉換爲字符串,只是爲了進行比較!這完全沒有意義,通常會導致問題。這樣做正確的方法 - 原生使用DATETIME和/或DATE數據類型!