【发布时间】:2018-04-24 15:31:34
【问题描述】:
在一张表上,我有一个 bigint 列,它存储具有微秒精度的时间戳,例如:
636453251396217655
636453251398405201
636453251592389899
636453251668326820
我必须构建一个脚本,如果该日期超过一周,则该行必须移动到另一个表。
我尝试使用以下方法转换为日期:
CREATE FUNCTION [dbo].[UNIXToDateTime] (@timestamp bigint)
RETURNS datetime
AS
BEGIN
DECLARE @ret datetime
SELECT @ret = DATEADD(second, @timestamp, '1970/01/01 00:00:00')
RETURN @ret
END
并像这样使用:
select dbo.UNIXToDateTime(636453251396217655)
但是由于 bigint,我的脚本崩溃了,因为:
int 数据中表达式转换期间的算术溢出错误 输入
我可能会丢失精度,重要的是日期部分,它是 sql 过滤器的主要部分。
【问题讨论】:
-
@DavidG 它们是有效的,由实时系统编写,并在epochconverter.com上进行了高精度检查
-
@DavidG 是的,以微秒为单位,如问题的第一行所述:-)
-
@IrvinDominin 。 . .正如 DavidG 指出的那样,您的值不是有效的 Unix 时间戳。您可以自己在网络上转换它们 epochconverter.com。 “6”的前导数字对于任何正常日期都是高度可疑的。
标签: sql-server tsql datetime epoch