我有一张包含Epoch值的表格。我必须删除超过12个月的记录..所以也许我必须将epoch值转换为datetime并检查它们是否超过12个月。你能帮忙写这个TSQL脚本吗?
我可以通过写一个where子句column_name < dateadd(month,-12,getdate())
检查超过12个月的记录,但是如何检查纪元值?
谢谢你的帮助!!
答案 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使用您在该列上可能包含的任何索引,这意味着更好的性能。