Как преобразовать целое число (время) в HH: MM: SS:: 00 в SQL Server 2008?
Здесь у меня есть таблица с столбцом time
(datatype is integer
), теперь мне нужно преобразовать целочисленное значение в формат времени HH:MM:SS:00
в SQL Server 2008.
Также необходимо уточнить в приведенном выше формате time
, означает ли 00 миллисекунды?
Пожалуйста, помогите нам в этом.
пример: 23421155 представляет 23: 42: 11: 55; 421151 представляет 00: 42: 11: 51
Надеюсь, что теперь это ясно.
Ответы
Ответ 1
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)
Ответ 2
Преобразуйте целое число в строку, а затем вы можете использовать функцию 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)
Ответ 3
В 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 < - Минуты времени
Ответ 4
Используйте встроенный MSDB.DBO.AGENT_DATETIME (20150119,0)
https://blog.sqlauthority.com/2015/03/13/sql-server-interesting-function-agent_datetime/
Ответ 5
Это будет работать:
DECLARE @MS INT = 235216
select cast(dateadd(ms, @MS, '00:00:00') AS TIME(3))
(где ms это просто количество секунд, а не формат времени)