我有一个表,其中包含一些time(7)类型的列。
我现在需要将这些列从time(7)转换为Ticks作为BIGINT(来自.NET),因为mssql不支持超过24小时的时间。
如何使用SQL更新数据库中已经存在的time(7)列,现在以滴答表示时间?
例如,如果我在数据库中存储了存储了“ 07:00” 的列,则该文本类似于 2384623897129873 作为BIGINT。我想知道如何进行转换。
答案 0 :(得分:1)
根据the doco,日期时间中的滴答数从特定的起点-0001年1月1日开始。这意味着,如果要将滴答作为偏移量存储到任意长度的一天中,则需要减去从DateTime.Now.Ticks开始的那一天开始的滴答数。
由于您将时间保持在非24小时的周期内,因此请确保您仍保留带有刻度线的日期-否则,您将不知道900,000,000,000
是否比第1天或第1天偏移25小时从第2天开始偏移小时。
答案 1 :(得分:1)
找到答案。
如本文档所述:
一毫秒有10,000个滴答声
所以我将Time(7)转换为毫秒,然后乘以10.000:
SELECT CONVERT(BIGINT, DATEDIFF(MILLISECOND, 0, MyCurrentDuration)) * 10000 as Ticks from CalculationResult