我想转换:
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;
此处在where子句中,Timelog
介于:2012-06-21
和2012-06-21
之间,但我希望它位于2012-06-21 00:00:00
和2012-06-21 23:59:59
之间
因此,我想将@Satrtdate / @EndDate
转换为上述格式,因此我想将00:00:00
追加到@StartDate
和23:59:59
追加到@EndDate
。
答案 0 :(得分: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);
您不想使用BETWEEN
的原因是因为其行为会因底层数据类型而异。如果是SMALLDATETIME
,您将向上舍入,并从第二天获取数据。如果是DATETIME2
,您可能会错过23:59:59.0000000 and 23:59:59.9999999
之间的数据。即使您现在知道数据类型,它也可能在您发布查询后发生更改。谁会回去纠正23:59:59
到23:59:00
或23:59:59.9999999
?使用开放式范围,在午夜下一个日之前选择所有内容,您将永远不必担心它。
请将这两篇文章改为: