1

我想转换:

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 子句中Timelogis between: 2012-06-21and2012-06-21但我希望它介于2012-06-21 00:00:00and2012-06-21 23:59:59

因此,我想将其转换为上述格式,@Satrtdate / @EndDate因此我想附加00:00:00@StartDate23:59:59.@EndDate

4

1 回答 1

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:00or 23:59:59.9999999?使用开放式范围,在第二天午夜之前选择所有内容您永远不必担心它。

请阅读这两篇文章:

于 2012-06-22T15:27:27.493 回答