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

时间:2012-06-22 15:24:56

标签: sql sql-server tsql

我想转换:

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-212012-06-21之间,但我希望它位于2012-06-21 00:00:002012-06-21 23:59:59之间

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

1 个答案:

答案 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:5923:59:0023:59:59.9999999?使用开放式范围,在午夜下一个日之前选择所有内容,您将永远不必担心它。

请将这两篇文章改为: