将Epoch转换为SQL Server日期并检查其是否超过12个月

时间:2017-06-28 17:20:14

标签: sql sql-server sql-server-2005

我有一张包含Epoch值的表格。我必须删除超过12个月的记录..所以也许我必须将epoch值转换为datetime并检查它们是否超过12个月。你能帮忙写这个TSQL脚本吗?

我可以通过写一个where子句column_name < dateadd(month,-12,getdate())检查超过12个月的记录,但是如何检查纪元值?

谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

嗯,大纪元时间是自1970年1月1日以来经过的秒数(不包括闰秒,但这完全可以忽略不计 - 从1972年到2016年之间的27闰秒according to wikipedia)。 假设您将这些值保留在int列中,您只需将一年前的日期转换为Epoch时间,并删除该列的值小于您获得的值的所有记录。 要从当前日期时间获取大纪元时间,只需使用DATEDIFF

SELECT DATEDIFF(SECOND, '1970-01-01T00:00:00', GETUTCDATE())

很容易添加到此DATEADD以获取12个月前的日期:

SELECT  DATEDIFF(
            SECOND, 
            '1970-01-01T00:00:00', 
            DATEADD(
                YEAR,
                -1,
                GETUTCDATE()
            )
        )

所以我会选择这样的东西:

DELETE 
FROM TableName
WHERE EpochColumn <= DATEDIFF(
                        SECOND, 
                        '1970-01-01T00:00:00', 
                        DATEADD(
                            YEAR,
                            -1,
                            GETUTCDATE()
                        )
                     )

请注意,通过将日期值转换为Epoch而不是相反,您还允许SQL Server使用您在该列上可能包含的任何索引,这意味着更好的性能。