2016-07-01 6 views
0

SQL gespeicherte Prozedur sp_add_jobschedule erwartet die Startzeit des Jobs in einem HHMMSS Format als int. Wie soll man dieses Format behalten, wenn die führenden Nullen nicht mit Int vorhanden sind?SQL behält führende Nullen in HHMMSS als int

Ich versuche, Jobs programmatisch zu planen, um etwas 2 Tage nach der Minute nach ausgelöst zu tun.

MSDN Documentation:

@ active_start_time =] active_start_time Zeit an jedem beliebigen Tag zwischen active_start_date und active_end_date Jobausführung zu beginnen. active_start_time ist int, ohne Standard. Die Uhrzeit wird im 24-Stunden-Format als HHMMSS formatiert.

+0

Das Speichern von 'TIME' als' INT' ist eine schlechte Idee. Warum nicht den Proc ändern, um eine 'TIME' zu akzeptieren? – scsimon

+0

@scsimon Dies ist ein System gespeichert Proc - nicht etwas, was er schrieb oder steuern kann. – Siyual

Antwort

2

Die führenden Nullen sind auf der int fehlt, ist nicht wirklich ein Problem. In ein paar Beispiele:

TIME  HHMMSS INT 
00:00:05 000005 5 
00:01:15 000115 115 
00:10:00 001000 1000 
01:01:00 010100 10100 
10:00:00 100000 100000 
19:45:16 194516 194516 
23:59:59 235959 235959 

Jedes Mal, unabhängig von den führenden Nullen, ist einzigartig und kann zu der tatsächlichen Zeit rekonstruiert werden. Ein Weg, dies zu überprüfen, ist über die folgenden:

Declare @TimeTable Table 
(
    Time Int 
) 

Insert @TimeTable 
Select 000005 Union All 
Select 000115 Union All 
Select 001000 Union All 
Select 010100 Union All 
Select 100000 Union All 
Select 194516 Union All 
Select 235959 

Select Time Int, 
     TimeFromParts 
     ( 
      Time/10000,   --Hours 
      (Time % 10000)/100, --Minutes 
      ((Time % 10000) % 100), --Seconds 
      0,      --Fractions 
      0      --Precision 
     ) As Time 
From @TimeTable 

Int  Time 
---------------- 
5  00:00:05 
115  00:01:15 
1000 00:10:00 
10100 01:01:00 
100000 10:00:00 
194516 19:45:16 
235959 23:59:59 

Also, keine Sorge um ihn als int Wert gegossen wird, ist es nur in den proc passiert auch bei der führende Nullen vorhanden. Es wird am Ende immer noch funktionieren.

Execute sp_add_jobschedule ..., @active_start_time = 003000, ... 

Weglassen sie werden keinen Unterschied im Verhalten von der proc verursachen, aber es wird für Verwirrung stiften versucht, es zu lesen.

0

Dies ist zu lang für einen Kommentar.

Ich bin mir nicht sicher, was das Problem ist. 1:00 Uhr Nachmittags. wäre 130000. 1:00 Uhr wäre 100. Dies entspricht 000100. Die führenden Nullen erscheinen nicht in der numerischen Darstellung des Wertes.

Wenn Sie den Wert von einer Datums-/Zeitvariablen konstruieren wollen:

select datepart(hour, @t) * 10000 + datepart(minute, @t) * 100 + datepart(second, @t) 
Verwandte Themen