SQL Server - DateTime转换字段问题

时间:2011-09-25 17:00:18

标签: sql sql-server

在表格中有以下字段:

运行日期:2011-09-25 00:00:00.000

运行时间:05:00:00

运行时间:03:22:51

我需要的是Dateformat

运行日期+运行时间=作业开始时间(日期时间格式)

运行日期+(运行时间+运行持续时间)=作业结束时间(日期时间格式)

我很难做转换。任何人都可以帮忙。

这是我正在使用的存储过程 - 任何人都可以建议如何监控:

ALTER PROCEDURE [dbo]。[Sp_listjobrunhistory] ​​@dateparam DATETIME,                                               @JobName VARCHAR(100) 如   开始       SELECT --sysjobhistory.server,              sysjobs.name              如              JOB_NAME,              CASE sysjobhistory.run_status                什么时候0''失败'                什么时候那么'成功'                ELSE'???'              结束              如              run_status,              投(              Isnull(子串(CONVERT(VARCHAR(8),run_date),1,4)+' - '+                            子(CONVERT(VARCHAR                                      (8),run_date),5,2)+' - '+                     子(CONVERT(VARCHAR(                               8),run_date),7,2),'')AS DATETIME)              如              [运行日期],

         Isnull(Substring(CONVERT(VARCHAR(7), run_time+1000000), 2, 2) + ':'
                 +
                       Substring(CONVERT(VARCHAR(7), run_time+1000000), 4, 2
                        )
                +
                ':' +
                Substring(CONVERT(VARCHAR(7), run_time+1000000), 6, 2), '') 
         AS
         [Run TIME],
         Isnull(Substring(CONVERT(VARCHAR(7), run_duration+1000000), 2, 2) +
                 ':' +
                       Substring(CONVERT(VARCHAR(7), run_duration+1000000),
                       4,
                       2)
                + ':' +
                Substring(CONVERT(VARCHAR(7), run_duration+1000000), 6, 2),
         ''
         ) AS
         [Duration],
         Isnull(Substring(CONVERT(VARCHAR(7), run_time+run_duration+1000000), 2, 2) + ':'
                 +
                       Substring(CONVERT(VARCHAR(7), run_time+run_duration+1000000), 4, 2
                        )
                +
                ':' +
                Substring(CONVERT(VARCHAR(7), run_time+run_duration+1000000), 6, 2), '')
         AS
         [Total TIME],             
         sysjobhistory.step_id,
         sysjobhistory.step_name,
         sysjobhistory.MESSAGE
  FROM   msdb.dbo.sysjobhistory
         INNER JOIN msdb.dbo.sysjobs
           ON msdb.dbo.sysjobhistory.job_id = msdb.dbo.sysjobs.job_id
  WHERE  sysjobhistory.run_date <= Datepart(yyyy, @dateparam) * 10000 +
                                         Datepart(mm, @dateparam) * 100 +
                                  Datepart
                                  (
                                         dd, @dateparam)
         AND sysjobs.name = @JobName --remove this line if you want to show all jobs for the specified day
  ORDER  BY instance_id DESC

END 此致

3 个答案:

答案 0 :(得分:1)

在SQL Server 2008中,不需要转换。

declare @T table
(
  RunDate datetime,
  RunTime time,
  RunDuration time
)

insert into @T values('2011-09-25 00:00:00.000', '05:00:00', '03:22:51')

select RunDate + RunTime as StartTimeOfJob,
       RunDate + RunTime + RunDuration as EndTimeOfJob
from @T

在2008年之前的版本中可能是这样的。

declare @T table
(
  RunDate datetime,
  RunTime varchar(8),
  RunDuration varchar(8)
)

insert into @T values(
'2011-09-25 00:00:00.000',
'05:00:00',
'03:22:51')

select RunDate + RunTime as StartTimeOfJob,
       RunDate + RunTime + RunDuration as EndTimeOfJob
from @T

糟糕!那里也不需要转换。

答案 1 :(得分:0)

以下是完成您所需要的代码:

create table dbo.RunDurationTest
(
    RunDate datetime not null,
    RunTime time not null,
    RunDuration time not null
)

insert into rundurationtest
values ('2011-09-25 00:00:00.000', '05:00:00', '03:22:51')

select 
    (RunDate + RunTime) as RunDateTime,
    (RunDate + RunTime + RunDuration) as EndRunDateTime,
    *
from rundurationtest

答案 2 :(得分:0)

假设[Run Time][Run Duration]varchar字段,我会有以下内容:

select StartJob = [Run Date] + convert(datetime, [Run Time])

select EndJob   = StartJob + convert(datetime, [Run Duration])