Добавить новый вычисляемый столбец;Start_DateTime плюс продолжительность (время) как End_datetime - PullRequest
0 голосов
/ 01 июня 2018

Работа агента SQL Server;В msdb у вас есть dbo.sysjobhistory, которая дает вам Run_date и Run_time типа INT, которые легко можно преобразовать в Start_Datetime с помощью dbo.agent_datetime.Я получаю: 2018-05-17 01: 13: 09.240

Run_duration также INT.Я использую

STUFF(STUFF(RIGHT('000000' + CAST(jh.run_duration AS VARCHAR(6)), 6), 5, 0, ':'), 3, 0, ':') AS'Time_HH:MM:SS'

Я получаю 27: 31: 20

Я хочу вычислить новый столбец как End_datetime.(т.е. Start_datetime + Run_duration) Мои задания выполняются более 24 часов и т. д., поэтому дата может быть перенесена и на следующий день.

С чего начать?После преобразования или начните с исходных INT столбцов

Run_date, Run_time, Run_duration

Самый простой сценарий будет наиболее полезным.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Преобразуйте длительность в секунды и выполните Dateadd

 SELECT convert(DATETIME, convert(VARCHAR(10), run_date))
        ,run_duration % 100 seconds
        ,DATEADD(ss, (run_duration % 100), convert(DATETIME, convert(VARCHAR(10), run_date))) 
              End_date
    FROM dbo.sysjobhistory
0 голосов
/ 05 июня 2018

Мне показалось, что это работает легче

    , DATEADD(SECOND, run_duration / 10000 * 3600 + run_duration % 10000 / 100 * 60 + run_duration % 100, 
msdb.dbo.agent_datetime(jh.run_date, jh.run_time)) AS End_DateTime
0 голосов
/ 01 июня 2018

Вы можете разыграть "длительность" как datetime, а затем просто сложить ее в start_date

select  dbo.agent_datetime(run_date, run_time) START_TIME,
        STUFF(STUFF(RIGHT('000000' + CAST ( run_duration AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') DURATION,
        CONVERT(datetime, dbo.agent_datetime(run_date, run_time)) +
        CONVERT(datetime, STUFF(STUFF(RIGHT('000000' + CAST ( run_duration AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') ) AS END_TIME

from sysjobhistory

Вывод:

START_TIME              DURATION END_TIME
----------------------- -------- -----------------------
2017-06-11 04:00:01.000 01:05:33 2017-06-11 05:05:34.000
2017-06-18 04:00:00.000 01:05:30 2017-06-18 05:05:30.000
2017-06-18 04:00:00.000 01:05:30 2017-06-18 05:05:30.000

2018-01-28 04:00:00.000 02:15:07 2018-01-28 06:15:07.000
2018-01-28 04:00:00.000 02:15:07 2018-01-28 06:15:07.000
2018-02-04 04:00:00.000 02:14:29 2018-02-04 06:14:29.000
2018-02-04 04:00:00.000 02:14:30 2018-02-04 06:14:30.000
2018-02-11 04:00:01.000 02:18:47 2018-02-11 06:18:48.000
2018-02-11 04:00:00.000 02:18:48 2018-02-11 06:18:48.000
2018-02-18 04:00:01.000 02:18:18 2018-02-18 06:18:19.000
...