将日期转换为字符串,连接字符串并在SQL中重新转换为日期

Ris*_*ish 1 sql t-sql sql-server

我想转换:

select  convert(nvarchar(16), TimeLog, 120) requestTime,
        count(Request) As noOfQueries 
from    LogData 

where  TimeLog  between @StartDate and @EndDate

group by convert(nvarchar(16), TimeLog, 120) order by requestTime;
Run Code Online (Sandbox Code Playgroud)

这里的where子句Timelog介于:2012-06-212012-06-21我之间2012-06-21 00:00:00,我希望介于和之间2012-06-21 23:59:59

因此,我想转换@Satrtdate / @EndDate成上述格式,所以我想追加00:00:00@StartDate23:59:59@EndDate.

Aar*_*and 6

你想要的是:

SELECT 
  requestDate = CONVERT(CHAR(10), TimeLog, 120), 
  noOfQueries = COUNT(Request)
WHERE TimeLog >= @StartDate 
AND TimeLog < DATEADD(DAY, 1, @EndDate)
GROUP BY CONVERT(CHAR(10), TimeLog, 120)
ORDER BY CONVERT(CHAR(10), TimeLog, 120);
Run Code Online (Sandbox Code Playgroud)

您不想使用的原因BETWEEN是因为其行为将根据基础数据类型而有所不同.如果是SMALLDATETIME,您将进行整理,并从第二天获取数据.如果是DATETIME2,你可能会错过之间的数据23:59:59.0000000 and 23:59:59.9999999.即使您现在知道数据类型,它也可能在您发布查询后发生更改.谁是要回去和纠正23:59:59,以23:59:0023:59:59.9999999?在开放式范围内,在第二天午夜之前选择所有内容,您将永远不必担心它.

请阅读这两篇文章: