0

mssql の日付範囲を実行して、1 時間の範囲のデータを返したいと考えています。つまり、過去 1 時間のデータを返したいのですが、現在時刻からの過去 1 時間のデータは返しません。

Declare @today datetime
set @today=GETDATE()
select *  from table1  where
datetime>= DATEADD(hh,-2,@Today)

たとえば、現在の時刻が午前 11:50:00 の場合、クエリで午前 10:00:00 から午前 10:59:00 までのすべてのデータを返したいのですが、変数を静的にすることはできません。動的にしたいので、クエリを実行する時刻に関係なく、現在の時刻に関係なく、過去 1 時間のデータのみが返されます。したがって、午前 11:00:00 から午前 11:59:00 までの任意の時間である可能性があります。結果として、午前 10 時から午前 10 時 59 分までのデータを返す必要があります。

ありがとうございました

4

5 に答える 5

1

これはうまくいくはずです:

DECLARE @D DATETIME
SET @D = GETDATE()
SELECT @D AS 'Date',
DATEADD(HOUR,-1,DATEADD(MINUTE,-(DATEPART(MINUTE, @D)),DATEADD(SECOND,-(DATEPART(SECOND, @D)),DATEADD(MILLISECOND,-(DATEPART(MILLISECOND, @D)),@D)))) AS 'Range start',
DATEADD(MINUTE,-(DATEPART(MINUTE, @D)),DATEADD(SECOND,-(DATEPART(SECOND, @D)),DATEADD(MILLISECOND,-(DATEPART(MILLISECOND, @D)),@D))) AS 'Range end'

日付:

2013-11-04 17:35:51.843 

これは次のような範囲を返します。

Start: 2013-11-04 16:00:00.000  
End: 2013-11-04 17:00:00.000

00:00:00 ~ 01:00:00 の時間については、前日から 23:00:00 ~ 00:00:00 の範囲が取得されます。

于 2013-11-04T16:38:03.350 に答える
1
declare @today datetime
set @today=GETDATE()
select @today, DATEADD(HOUR, -2, DATEADD(HOUR, DATEDIFF(HOUR, 0, @today), 0)), DATEADD(MINUTE, -1, DATEADD(HOUR, -1, DATEADD(HOUR, DATEDIFF(HOUR, 0, @today), 0)))

結果:

2013-11-04 17:42:17.933 2013-11-04 15:00:00.000 2013-11-04 15:59:00.000
于 2013-11-04T16:40:57.950 に答える