Получить определенный порог времени в SQL - PullRequest
2 голосов
/ 28 июня 2011

У меня есть консольное приложение, которое будет выбирать записи, основываясь на том, выбрал ли пользователь получать уведомления ежедневно в определенный час дня, а также на всех записях, где пользователь выбрал почасовые. Работа будет выполняться каждые 15 минут. Как найти порог времени между 5 минутами до и 5 минутами после начала часа?

Это мой код

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

Это ошибка, которую я получаю

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

Я понял, у меня поменялись [Hour] и @NewNow, теперь я получаю правильные результаты с:

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

1 Ответ

1 голос
/ 28 июня 2011

Предполагая, что вы определили @TheHour как рассматриваемый час с 00 минутами / секундами:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...