SQL 大纪元时间 "Where" 声明

SQL Epoch Time "Where" Statement

我有两个关于查询 SQL 中使用 Epoch 时间戳的数据的问题。我可以使用以下文本转换 SELECT 语句中的日期:

DATEADD(HOUR, -4, DATEADD(SECOND, aa.fldTimeOfEvent, '1970-01-01 00:00:00'))

我不得不使用 "hour,-4" 将其转换为东部夏令时。我很好奇是否需要在 11 月夏令时结束时将其调整为 -5?有没有一种方法可以制定 SELECT 语句,使其自动针对 DST 进行调整?这将是自动报告的一部分,恐怕我们可能会错过更改此值的机会。

另外一个问题是如何使用WHERE语句获取某一天的数据。例如,如果我希望 WHERE 语句获取今天(2016 年 7 月 14 日)任何时间发生的所有条目,我该怎么做?我试过这个语句:

WHERE DATEADD(HOUR, -4, DATEADD(SECOND, aa.fldTimeOfEvent, '1970-01-01 00:00:00')) = '2016-07-14'

它似乎只抓取恰好等于当天午夜的条目(我认为)。我想要一天中任何时间发生的所有条目。

在此先感谢您的帮助。

我假设您正在使用 SQL 服务器。如果你只需要当前的偏移量,你可以使用 GETUTCDATE() 来计算它:

SELECT DATEDIFF(hour,GetUTCDate(),GETDATE())

如果您需要计算其他日期的偏移量,您可能需要使用 CLR 函数:https://dba.stackexchange.com/questions/28187/how-can-i-get-the-correct-offset-between-utc-and-local-times-for-a-date-that-is

链接到:https://blogs.msdn.microsoft.com/sqlserverfaq/2011/07/29/how-to-convert-utc-time-to-local-time-in-sql/

首先是简单的部分:

如果您只需要比较日期,请在比较之前将日期时间转换为日期:CONVERT(date, yourdatefield)

第二部分已在此处针对 UTC 时间进行了讨论和解决:Convert Datetime column from UTC to local time in select statement。您仍然需要添加 Epochtime 的偏移量。