1

I want to convert :

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;

Here in the where clause the Timelog is between: 2012-06-21 and 2012-06-21 but I want it between 2012-06-21 00:00:00 and 2012-06-21 23:59:59

Hence I want to convert the @Satrtdate / @EndDate into above format so I would like to append 00:00:00 to @StartDate and 23:59:59 to @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:0023:59:59.9999999

次の 2 つの記事をお読みください。

于 2012-06-22T15:27:27.493 に答える