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-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.
你想要的是:
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:00或23:59:59.9999999?在开放式范围内,在第二天午夜之前选择所有内容,您将永远不必担心它.
请阅读这两篇文章:
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |