2013-03-21 1 views
0

Как преобразовать time(7) в bigint в T-SQL?Преобразование времени (7) в bigint T-SQL

Я пытаюсь обновить и преобразовать данные из столбца с данными time(7) в другой столбец, который является типом bigint.

+0

В чем заключаются отношения? Вы хотите время в секундах с «00: 00: 00.0000000»? минут? миллисекунды? nanaoseconds? Что представляет ценность bigint? –

+0

Он будет отображать метки временного интервала, но изначально я хочу преобразовать все данные, которые у меня есть как 'time (7)' в базе данных, в 'bigint' –

+0

. Попробуйте быть более четкими, покажите некоторые примеры данных и ожидаемые результаты , – Kaf

ответ

2

Предполагая, что, когда вы говорите «тик», вы имеете в виду секунды. Если вы имеете в виду миллисекунды, измените «ss» на «ms».

Declare @time7 Time(7) 
Set  @time7 = Convert(Time(7),Getdate()) 

Select Convert(Bigint,Datediff(ss,0,@time7)) 
+0

Вы можете заменить '' 00: 00: 00.0000000'' на '0' в' DateDiff'. Также просто обратите внимание, что вам не хватает закрывающей скобки функции Convert выше. – Kaf

+0

@Kaf Хороший звонок, обе точки. –

+0

Нет проблем !, OP не очень четко о требованиях. +1 для ответа. – Kaf

1

datediff возвращает Int, так что если вы хотите полную точность времени, (7), что нужно сделать некоторые расчеты. Использование microsecond или nanosecond в datediff может привести к переполнению.

declare @T time(7) = '23:59:58.9999999' 
select datediff(second, '00:00', @T) * cast(10000000 as bigint) + right(@T, 7) 

Результат:

863989999999 

Важно использовать 00:00 вместо 0 в datediff. С 0 ваше значение времени будет неявно преобразовано в datetime, и значение, используемое выше, будет преобразовано в значение 23:59:59, так как datetime округляется до 0,000, 0,003 или 0,007.

Все это было бы намного проще, если datediff supported bigint.

Смежные вопросы