2015-08-22 53 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数据类型!