如何在SQL Server 2008中将整数(时间)转换为HH:MM:SS :: 00?

Pra*_*een 15 sql time date sql-server-2008

这里我有一个带有time列的表(数据类型是integer),现在我需要HH:MM:SS:00在SQL Server 2008 中将整数值转换为时间格式.

还需要在上面的time格式中澄清,00是否代表毫秒?

请帮忙.

例如:23421155代表23:42:11:55; 421151代表00:42:11:51

希望现在很清楚.

Mik*_*son 17

declare @T int

set @T = 10455836
--set @T = 421151

select (@T / 1000000) % 100 as hour,
       (@T / 10000) % 100 as minute,
       (@T / 100) % 100 as second,
       (@T % 100) * 10 as millisecond

select dateadd(hour, (@T / 1000000) % 100,
       dateadd(minute, (@T / 10000) % 100,
       dateadd(second, (@T / 100) % 100,
       dateadd(millisecond, (@T % 100) * 10, cast('00:00:00' as time(2))))))  
Run Code Online (Sandbox Code Playgroud)

结果:

hour        minute      second      millisecond
----------- ----------- ----------- -----------
10          45          58          360

(1 row(s) affected)


----------------
10:45:58.36

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)


all*_*ata 9

将整数转换为字符串,然后您可以使用STUFF函数将冒号插入时间字符串.完成后,您可以将字符串转换为时间数据类型.

SELECT CAST(STUFF(STUFF(STUFF(cast(23421155 as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME)
Run Code Online (Sandbox Code Playgroud)

这应该是将其转换为时间而不做任何疯狂的事情的最简单方法.

在您的示例中,您还有一个int,其中前导零不存在.在这种情况下,你可以简单地做这样的事情:

SELECT CAST(STUFF(STUFF(STUFF(RIGHT('00000000' + CAST(421151 AS VARCHAR),8),3,0,':'),6,0,':'),9,0,'.') AS TIME)
Run Code Online (Sandbox Code Playgroud)


小智 6

使用内置的 MSDB.DBO.AGENT_DATETIME(20150119,0)

https://blog.sqlauthority.com/2015/03/13/sql-server-interesting-function-agent_datetime/

  • @chŝdk 这可能是投反对票的原因,而不仅仅是删除。 (3认同)
  • @chŝdk这可能是一个简洁的答案,但它是_“使用内置的MSDB.DBO.AGENT_DATETIME(20150119,0)”_,该链接仅用于支持。这使得它不是一个仅链接的答案。 (2认同)

Gol*_*hop 6

只是说这是最简单的方法,因为该值是实际值,只是视觉上不采用时间格式。在没有任何其他并发症的情况下,以下是最快的结果。

declare @val int = 23421155
declare @strTime varchar(25)

select
    @strTime = format(@val, '00:00:00:00')

select
    @strTime
    , cast(@strTime as Time)
Run Code Online (Sandbox Code Playgroud)

生产:

23:42:11:55
23:42:11.0550000
Run Code Online (Sandbox Code Playgroud)