SQL在HHMMSS中保持领先0为int

时间:2016-07-01 14:51:12

标签: sql sql-server-2012

SQL存储过程System.getProperties().put("http.proxyHost", "someProxyURL"); System.getProperties().put("http.proxyPort", "someProxyPort"); System.getProperties().put("http.proxyUser", "someUserName"); System.getProperties().put("http.proxyPassword", "somePassword"); 期望sp_add_jobschedule格式的作业开始时间为HHMMSS。当Int不存在前导0时,你应该如何保持这种格式?

我正在尝试以编程方式安排作业在触发后的2天内执行某些操作。

MSDN Documentation

  

@ active_start_time =] active_start_time   active_start_date和active_end_date之间的任何一天的时间,以开始执行作业。 active_start_time是int,没有默认值。时间格式为24小时制HHMMSS。

2 个答案:

答案 0 :(得分:2)

int上缺少的前导零并不是真正令人担忧的问题。在几个例子中:

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

每次,无论前导零,都是唯一的,并且可以重建到实际时间。检查这个的方法是通过以下方式:

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

所以,不要担心它被强制转换为int值,只要将前导零点传递给proc即可。它最终仍然有用。

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

省略它们不会对proc的行为造成任何影响,但会导致混淆,试图阅读它。

答案 1 :(得分:0)

评论太长了。

我不确定问题是什么。 1:00 PM。将是130000.凌晨1:00将是100.这相当于000100.前导零不会出现在值的数字表示中。

如果要根据日期/时间变量构造值:

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