Необходимо выяснить, как анализировать GETDATE (), чтобы сравнить его со значением ЧЧММСС в таблице, чтобы найти истекшее время - PullRequest
3 голосов
/ 26 февраля 2011

Мне нужно найти способ создать оповещение, которое будет предупреждать меня о прошедшем времени пакетного задания, отличного от SQL.Информация о пакетном задании записывается в базу данных.

У меня есть таблица с именем F986110, в которой записывается время отправки этих пакетных заданий.Дата записывается в поле JCSBMDATE как шестизначное значение 1YYDDD, где YY = две последние цифры текущего года, а DDD - текущий день, пронумерованный с 1 января. Например, 25 февраля 2011 года будет 111056. Времязаписывается в столбце JCSBMTIME в формате hhmmss в стиле милитари, но без 10 перед 10 часами.Существует также столбец состояния, в котором указывается обработка (P), ожидание (W) и выполнено (D).

Моя задача - отправить предупреждение для всех заданий, которые находятся в состоянии P или W на более длительный срок.чем 15 минут.Я бился головой об этом в течение некоторого времени.Я нашел много хороших вещей, которые указывают мне правильное направление, но мне приходится анализировать системное время, сравнивать его с каждой возвращенной записью и оповещать о тех (если таковые имеются), которые совпадают, не в моих силах.

1 Ответ

3 голосов
/ 26 февраля 2011

Преобразование JCSBMDATE (1YYDDD) и JCSBMTIME в datetime

declare @t table (JCSBMDATE char(6),JCSBMTIME varchar(6))
insert @t select '111056', '104602'
insert @t select '199365', '81602'

select dateadd(d,
               right(JCSBMDATE,3)-1,
               convert(datetime,'01/01/' + substring(JCSBMDATE,2,2),3)) +
       convert(datetime, stuff(
                         stuff(JCSBMTIME,
                               len(JCSBMTIME)-3,0,':'),
                               len(JCSBMTIME),0,':'))
from @t

Обратное преобразование, более удобное для индекса

select '1' +
       right(year(getdate()),2) +
       right(1000+datepart(dy, getdate()),3) as JCSBMDATE,
       right(1+replace(convert(char(8),getdate(),8),':',''),6) as JCSBMTIME

Вы можете легко настроить getdate() с помощью dateadd(mi,-15,getdate()), чтобы получитьЗначения JCSBMDATE и JCSBMTIME 15 минут назад.

...