Вопрос по sql-server-2008, sql, date, time – Как преобразовать целое число (время) в ЧЧ: ММ: СС :: 00 в SQL Server 2008?

12

Здесь у меня есть стол сtime столбец (тип данныхinteger), теперь мне нужно преобразовать целочисленное значение в формат времениHH:MM:SS:00 в SQL Server 2008

Также необходимо уточнение в вышеtime формат, 00 представляет ли миллисекунды?

Пожалуйста, помогите в этом.

пример: 23421155 обозначает 23: 42: 11: 55; 421151 представляет 00: 42: 11: 51

Надеюсь, что теперь это понятно.

случайное предложение мс с полуночи? DATEADD (миллисекунды, 10455836, & APOS; 00: 00: 00 & APOS;) Alex K.
В каком диапазоне находятся значения, любые & gt; 86400000? Вы можете создать запись в известное время и показать оба? Alex K.
Я не знаю формат времени, который они использовали, но вот пример 10455836. Praveen
Вам нужно знать, что означает это число, прежде чем кто-либо скажет вам, как преобразовать его во время. Aaron Bertrand
Какой числовой формат? Alex K.

Ваш Ответ

4   ответа
16
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)
Дополнительная информация согласноtime Тип данных можно найти здесь:technet.microsoft.com/en-us/library/bb677243.aspx
Прошло 4 с половиной года спустя, но это следует принять как ответ. Это именно то, что мне было нужно
8

а затем вы можете использовать функцию 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)
0
@MarkRotteveel Несмотря на то, что вы говорите, это правда, ответ не хватает объяснения, описания и форматирования.
@ ch & # x15D; dk Это может быть причиной понизить голос, а не просто удалить.
@ ch & # x15D; dk Это может быть краткий ответ, но это"Use the built-in MSDB.DBO.AGENT_DATETIME(20150119,0)"Ссылка только для поддержки. Это делает его не только ссылочным ответом.
@ c & # x43D; & # x15D; dk И учитывая, что ответ не соответствует ни одному из критериев удаления, ответis достойно быть здесь. То, что вы считаете, что ответ заслуживает отрицательного ответа, не является причиной для голосования, чтобы удалить ответ по причине, которая неприменима.
@MarkRotteveel Первая цель SO - давать и хранить только соответствующие ответы и сообщения, а не только голосование или обвинение, если ответ стоит того, чтобы быть здесь, он был бы здесь :)
1

м образом:

--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 & lt; - Время в минутах и 1900-01-01 14: 47: 00.000 & lt; - Время в минутах

Похожие вопросы