SQL Server-日期时间转换字段问题

SQL Server-日期时间转换字段问题,sql,sql-server,Sql,Sql Server,表中有以下字段: 运行日期:2011-09-25 00:00:00.000 运行时间:05:00:00 运行持续时间:03:22:51 我需要的是日期格式 运行日期+运行时间=作业的开始时间(日期时间格式) 运行日期+(运行时间+运行持续时间)=作业结束时间(日期时间格式) 我正在努力转换。谁能帮忙吗 这是我正在使用的存储过程-是否有人可以建议如何监视此过程: ALTER PROCEDURE[dbo].[Sp_listjobrunhistory]@dateparam DATETIME, @Job

表中有以下字段:

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

运行时间:05:00:00

运行持续时间:03:22:51

我需要的是日期格式

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

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

我正在努力转换。谁能帮忙吗

这是我正在使用的存储过程-是否有人可以建议如何监视此过程:

ALTER PROCEDURE[dbo].[Sp_listjobrunhistory]@dateparam DATETIME, @JobName VARCHAR(100) 作为 开始 选择--sysjobhistory.server, sysjobs.name 作为 工作名称, 案例sysjobhistory.run\u状态 当0时,则“失败” 当1“成功”时 还有什么 结束 作为 运行状态, 铸造( Isnull(子字符串(CONVERT(VARCHAR(8),run_date),1,4)+'-'+ 子字符串(CONVERT(VARCHAR (8) ,运行日期),5,2)+'-'+ 子字符串(CONVERT(VARCHAR( 8) ,运行日期),7,2),“”)作为日期时间) 作为 [运行日期]

         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
Isnull(子字符串(CONVERT(VARCHAR(7),运行时+1000000),2,2)+':'
+
子字符串(CONVERT(VARCHAR(7),运行时间+1000000),4,2
)
+
':' +
子字符串(CONVERT(VARCHAR(7),运行时间+1000000),6,2),“”)
作为
[运行时],
Isnull(子字符串(CONVERT(VARCHAR(7),run_duration+1000000),2,2)+
':' +
子字符串(转换(VARCHAR(7),运行持续时间+1000000),
4.
2)
+ ':' +
子字符串(CONVERT(VARCHAR(7),运行时长+1000000),6,2),
''
)作为
[持续时间],
Isnull(子字符串(CONVERT(VARCHAR(7),运行时间+运行持续时间+1000000),2,2)+':'
+
子字符串(CONVERT(VARCHAR(7),运行时间+运行持续时间+1000000),4,2
)
+
':' +
子字符串(转换(VARCHAR(7),运行时间+运行持续时间+1000000),6,2),“”)
作为
[总时间],
sysjobhistory.step_id,
sysjobhistory.step_名称,
sysjobhistory.MESSAGE
来自msdb.dbo.sysjobhistory
内部联接msdb.dbo.sysjobs
在msdb.dbo.sysjobhistory.job_id=msdb.dbo.sysjobs.job_id上

其中sysjobhistory.run_date以下是完成您所寻找的内容的代码:

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

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

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

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

在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

哎呀。那里也不需要转换。

您使用的是什么版本的SQL Server?栏目的数据类型是什么?@MikaelEriksson很好,我应该在回答之前问一下。我假设SQL Server 2008的最小值为。@jmoreno-它可以是一个日期,但不能像问题中那样指定该值。