20

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

上面的格式还需要说明一下time,00是否代表毫秒?

请帮助解决这个问题。

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

希望现在很清楚。

4

6 回答 6

22
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)
于 2012-09-25T05:59:34.320 回答
12

将整数转换为字符串,然后您可以使用 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)
于 2014-11-05T05:30:43.370 回答
4

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

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

于 2019-01-02T12:09:19.170 回答
3

这将起作用:

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

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

于 2019-06-17T08:34:36.600 回答
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 <- 以分钟为单位的时间和 1900-01-01 14:47:00.000 <- 分钟

于 2013-11-04T09:06:48.193 回答
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)
-------------------------------------------------------------------------------------------------------------------
于 2020-04-20T04:55:48.010 回答