2011-06-28 5 views
2

私は、ユーザーが1時間の特定の時刻に毎日通知することを選択した場合、およびユーザーが1時間ごとに選択したすべてのレコードを選択した場合に基づいてレコードを選択するコンソールアプリケーションを使用します。 ジョブは15分ごとに実行されます。 時間の先頭から5分前から5分後までの時間のしきい値はどのようにして見つけられますか?SQLで特定の時間のしきい値を取得

これは、これは私が、私はそれを得た

The data types time and datetime are incompatible in the greater than or equal to operator. 

を得ているとエラーになり私のコード

Declare @Now datetime 
Declare @NowHour int 
Declare @NowMinute int 
Declare @NewNow nvarchar(50) 

Set @Now = {fn Now()} 
Set @NowHour = (SELECT DATENAME(hh, @Now)) 
Set @NowMinute = (SELECT DATENAME(mi, @Now)) 
Set @NewNow = Cast(Cast(@NowHour As nvarchar(2)) + ':' + Cast(@NowMinute As nvarchar(2)) as Time) 
Select @Now, @NowHour, @NowMinute, @NewNow 

Select * From vw_consumerAlerts 
Where casexid not in 
(Select casexid from alerthistory) 
And Name = 'Always' 
Or ([Hour] Between DateAdd(minute, -5, @NewNow) And DateAdd(minute, -5, @NewNow)) 

ですが、私は[時間]を持っていたと@NewNowがスワップ、今私は、正しい結果を得ます:

(@NewNow Between DateAdd(minute, -5, [Hour]) And DateAdd(minute, 5, [Hour])) 

答えて

1

と仮定すると、あなたは00分/秒で問題になっている時間であるとして@TheHourを定義している:

WHERE mydatecol BETWEEN DATEADD(minute, -5, @TheHour) AND DATEADD(minute, 5, @TheHour) 

UPDATE

この参照してください:時間と日時が異なっているので、あなたは、私はここに、粗例でやったような時間に自分の日時をキャストする必要が

select 1 
where cast('1/1/2010 1:04pm' as time) 
    between cast('1/1/2010 12:55pm' AS time) 
    and cast ('1/1/2010 1:05pm' as time) 

を。だからあなたの場合

Select * From vw_consumerAlerts 
Where casexid not in 
    (Select casexid from alerthistory) 
And Name = 'Always' 
Or ([Hour] Between cast(DateAdd(minute, -5, @NewNow) as time) 
    And cast(DateAdd(minute, -5, @NewNow) as time)) 
+0

私はあなたがこの最初の、DATEADD(分、-5、@theHour) –

+0

GAH、私はいつも逆に、これら2つのパラメータを取得していますをテストdidntの前提としています。申し訳ありませんが、修正。 –

+0

私は上記の私のSQLコードを置く、間に動作していないようです。私は少し何かを見逃していると私は知っている...ちょうど傾けることはできません –

関連する問題