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

问题描述 投票:0回答:8

这里我有一个带有

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

还需要澄清一下上面的

time
格式,00是否代表毫秒?

请帮忙解决这个问题。

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

希望现在一切都清楚了。

sql sql-server-2008 date time
8个回答
25
投票
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))))))  

结果:

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

(1 row(s) affected)


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

(1 row(s) affected)

13
投票

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

SELECT CAST(STUFF(STUFF(STUFF(cast(23421155 as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME)

这应该是将其转换为时间的最简单方法,无需做任何疯狂的事情。

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

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

6
投票

6
投票

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

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

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

select
    @strTime
    , cast(@strTime as Time)

产品:

23:42:11:55
23:42:11.0550000

4
投票

这会起作用:

DECLARE @MS INT = 235216
select cast(dateadd(ms, @MS, '00:00:00') AS TIME(3))

(其中 ms 只是秒数而不是时间格式)


1
投票

您可以在 SQL 中使用以下时间转换,如下所示:

--Convert Time to Integer (Minutes)
DECLARE @timeNow datetime = '14:47'
SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108))

--Convert Minutes to Time
DECLARE @intTime int = (SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108)))
SELECT DATEADD(minute, @intTime, '')

结果: 第887章 <- Time in minutes and 1900-01-01 14:47:00.000 <-- Minutes to time


1
投票
CREATE FUNCTION [dbo].[_ICAN_FN_IntToTime](@Num INT) RETURNS NVARCHAR(13) AS ------------------------------------------------------------------------------------------------------------------- --INVENTIVE:Keyvan ARYAEE-MOEEN ------------------------------------------------------------------------------------------------------------------- BEGIN DECLARE @Hour VARCHAR(10)=CAST(@Num/3600 AS VARCHAR(2)) DECLARE @Minute VARCHAR(10)=CAST((@Num-@Hour*3600)/60 AS VARCHAR(2)) DECLARE @Time VARCHAR(13)=CASE WHEN @Hour<10 THEN '0'+@Hour ELSE @Hour END+':'+CASE WHEN @Minute<10 THEN '0'+@Minute ELSE @Minute END+':00.000' RETURN @Time END ------------------------------------------------------------------------------------------------------------------- --SELECT dbo._ICAN_FN_IntToTime(25500) -------------------------------------------------------------------------------------------------------------------
    

0
投票
声明@MS INT = 235216 选择cast(dateadd(ms, @MS, '00:00:00') AS TIME(3))

声明@ss INT = 6389 选择转换(TIME(0), dateadd(ss, @ss, '00:00:00') ) AS [HH:mm:ss]

© www.soinside.com 2019 - 2024. All rights reserved.