2011-09-25 6 views
0

obtenu les champs suivants dans le tableau:SQL Server - champ de conversion DateTime Problème

Run Date: 2011-09-25 00: 00: 00.000

Durée: 05:00:00

Run durée: 03:22:51

Ce que je besoin est Dateformat

Run date + Run Time = Heure de début de (Format DateTime) Job

Date d'exécution + (Durée d'exécution + Durée d'exécution) = Heure de fin du travail (format DateTime)

Je n'arrive pas à effectuer la conversion. Quelqu'un peut-il aider s'il vous plait.

C'est la procédure stockée que je me sers - peut-on conseiller comment surveiller ceci:

PROCÉDURE ALTER [dbo] [Sp_listjobrunhistory] @dateparam DATETIME, @JobName VARCHAR (100) AS . BEGIN SELECT --sysjobhistory.server, sysjobs.name AS job_name, sysjobhistory.run_status CASE QUAND 0 ALORS 'Echec' QUAND 1 THEN 'Réussi' 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 [Exécuter DATE],

  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 salutations

+0

Quelle version de SQL Server utilisez-vous? Quels sont les types de données des colonnes? –

+0

@MikaelEriksson bon appel, j'aurais dû demander cela avant de répondre. J'ai supposé un minimum de SQL Server 2008. –

Répondre

1

Dans SQL Server 2008, aucune conversion est requis.

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 

Et dans les versions antérieures à 2008 cela pourrait être comme ça.

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. Aucune conversion nécessaire là non plus.

+0

En 2008 le rundate devrait être une date ... – jmoreno

+0

@jmoreno - Il pourrait ** être ** une date mais pas quand la valeur est spécifiée comme c'est dans la question. –

0

H oici le code pour accomplir ce que vous cherchez:

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

En supposant que les [Run Time] et [Run Duration] sont varchar champs, je donne les résultats suivants:

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

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