2011-09-25 56 views
0

了下表中的字段:SQL服務器 - 日期時間轉換問題領域

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

運行時間:05:00:00

運行時間:3點22分51秒

我需要的是DATEFORMAT

運行日期+運行時間=工作的開始時間(日期時間格式)

運行日期+(運行時間+運行持續時間)=作業結束時間(日期時間格式)

我正在努力做轉換。任何人都可以請幫忙。

這是存儲過程我使用的 - 任何人都可以告訴我如何監控這一點:

ALTER PROCEDURE [DBO] [Sp_listjobrunhistory] ​​@dateparam DATETIME, @JobName VARCHAR(100) AS 。 BEGIN SELECT --sysjobhistory.server, sysjobs.name AS JOB_NAME, CASE sysjobhistory.run_status WHEN 0 THEN '失敗' WHEN 1 THEN '成功' ELSE '???' END AS run_status, CAST( ISNULL(SUBSTRING(CONVERT(VARCHAR(8),run_date),1,4)+ ' - ' + SUBSTRING(CONVERT(VARCHAR (8),run_date),5, 2)+ ' - ' + SUBSTRING(CONVERT(VARCHAR( 8),run_date),7,2), '')AS DATETIME) AS [運行日期],

  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 此致

+0

你使用什麼版本的SQL Server?什麼是列的數據類型? –

+0

@MikaelEriksson很好的電話,我應該在回答之前提問。我假定最少的SQL Server 2008. – 2011-09-25 17:11:35

回答

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 

Ooops。不需要那裏的轉換。

+0

在2008年該rundate應該是一個日期... – jmoreno

+0

@jmoreno - 它**可以**是一個日期,但不是當指定值時,因爲它是在問題中。 –

0

H ERE是實現你在找什麼代碼:

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 
0

假設[Run Time][Run Duration]varchar領域,我有以下幾點:

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

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