Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

How long did a job run? Or: cast HHMMSS format to seconds

How long did a job run??
It should be simple:

select run_duration from msdb.dbo.sysjobhistory

BUT - NO!
run_duration is Elapsed time in the execution of the job or step in HHMMSS format (int) (from technet.microsoft).

Pay attention, that it is not always has all the 6 digits: 00:10:46 is 1046.

So, we need to cast it:

Cast to seconds:
146 = one minute and 46 seconds = 106 seconds:
select
(      (run_duration % 100) -- Seconds
       + 60 * ((run_duration /100) % 100) -- + minutes to seconds
       + 3600 * ((run_duration / 10000) % 100) -- + Hours to seconds
) as Duration_SEC
from msdb.dbo.sysjobhistory

Cast to 'HH:MM:SS' format:
146 = 00:01:46
select
(CASE len(run_duration)
       WHEN 1 THEN cast('00:00:0'
       + cast(run_duration as char) as char (8))
       WHEN 2 THEN cast('00:00:'
       + cast(run_duration as char) as char (8))
       WHEN 3 THEN cast('00:0'
       + Left(right(run_duration,3),1)
       +':' + right(run_duration,2) as char (8))
       WHEN 4 THEN cast('00:'
       + Left(right(run_duration,4),2)
       +':' + right(run_duration,2) as char (8))
       WHEN 5 THEN cast('0'
       + Left(right(run_duration,5),1)
       +':' + Left(right(run_duration,4),2)
       +':' + right(run_duration,2) as char (8))
       WHEN 6 THEN cast(Left(right(run_duration,6),2)
       +':' + Left(right(run_duration,4),2)
       +':' + right(run_duration,2) as char (8))
END) as Duration
from msdb.dbo.sysjobhistory

No comments:

Post a Comment