我有 bigInt:635307578922100000
我需要转换成DateTime
.
我尝试了几种方法来做到这一点:
SELECT
DATEADD(S, CONVERT(bigint,635307578922100000) / 1000, CONVERT(DATETIME, '1-1-1970 00:00:00'))
and:
SELECT
DATEADD(ms, 635307578922100000 / 86400000, (635307578922100000 / 86400000) +25567)
虽然我发现上面的代码适用于bigInts
like: 1283174502729
,使用我的 bigInt 我收到以下错误:
Msg 8115 ... 将表达式转换为数据时出现算术溢出错误
输入日期时间。
有谁知道如何解决它?
我认为它以刻度为单位(产量2014-03-18 16:44:52.210)。这是解决方案:
SELECT DATEADD(
MILLISECOND,
FLOOR(((635307578922100000-599266080000000000)%(10000000*60))/10000),
DATEADD(
MINUTE,
FLOOR((635307578922100000-599266080000000000)/(10000000*60)),
'01-01-1900'))
这个神奇值 599266080000000000 是在 PowerShell 中计算的 0001-01-01 和 1900-01-01 之间的刻度数,如下所示:
([DateTime]::Parse('1900-01-01')-[DateTime]::MinValue).Ticks
需要进行转换,因为 DATEADD 不能与 bigint 一起使用(需要 int)。 SQL Server DateTime 也限制为 1753 年 1 月 1 日。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)