Obtenir un seuil de time spécifique dans SQL

J'ai une application de console qui va choisir des loggings basés sur si l'user a choisi d'être informé tous les jours à une heure spécifique de la journée ainsi que tous les loggings où l'user a choisi toutes les heures. Le travail sera exécuté toutes les 15 minutes. Comment puis-je find un seuil entre 5 minutes avant et 5 minutes après le début de l'heure?

C'est mon code

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)) 

C'est l'erreur que je reçois

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

Je l'ai eu, j'ai eu [Heure] et @NewNow échangé, maintenant je reçois les résultats corrects avec:

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

En supposant que vous avez défini @TheHour comme étant l'heure en question avec 00 minutes / secondes:

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

METTRE À JOUR

Regarde ça:

 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) 

l'heure et la date / heure sont différentes, vous devez donc utiliser votre date et heure comme je l'ai fait dans l'exemple brut ici.

Donc dans votre cas:

 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))