Извлечь дату как метку времени UNIX из уже отформатированной строки даты и времени SQL - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть следующий фрагмент кода SQL, который выполняет следующее:

  1. Очевидно, просматривает поле даты и времени (сохраняется каждые 5 минут)
  2. Среднее и округляет вышеупомянутое поле даты / времени до часа. Результат выглядит так:

    2012-02-11 16:00:00.000
    2012-02-11 17:00:00.000
    2012-02-11 18:00:00.000
    2012-02-11 19:00:00.000
    

А вот код:

DATEADD(hh, DATEPART(hh, LogDetails.lastupdated), 
DATEADD(d, DATEDIFF(d, 0, LogDetails.lastupdated), 0)) AS TimePeriod

Это работает как очарование, и связанные объекты усредняются просто отлично. Теперь мне нужно превратить эту метку даты в метку времени UNIX (для целей построения диаграмм Flot). Может ли кто-нибудь немного помочь здесь? Что бы я ни делал, это не работает, все метки времени UNIX совпадают.

РЕДАКТИРОВАТЬ: Наконец-то работает !!

DATEDIFF(second, '1970/01/01 00:00:00', 
DATEADD(hh, DATEPART(hh, LogDetails.lastupdated),
DATEADD(d, DATEDIFF(d, 0, LogDetails.lastupdated), 0))) as UXTIME

1 Ответ

3 голосов
/ 13 февраля 2012

Рабочий пример:

DECLARE @gmtOffset AS INT = DATEDIFF(second, GETDATE(), GETUTCDATE()); 
DECLARE @someDates TABLE (d DATETIME);
INSERT INTO @someDates(d) VALUES('2012-02-11 16:00:00.000');
INSERT INTO @someDates(d) VALUES('2012-02-11 17:00:00.000');
INSERT INTO @someDates(d) VALUES('2012-02-11 18:00:00.000');
INSERT INTO @someDates(d) VALUES('2012-02-11 19:00:00.000');

SELECT DATEADD(second, @gmtOffset, d) AS time_in_gmt,
       DATEDIFF(second, '1970/01/01 00:00:00', DATEADD(second, @gmtOffset, d)) AS unix_timestamp
FROM @someDates;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...