2016-07-14 3 views
0

У меня есть два вопроса относительно запроса данных в SQL, использующих метки времени Epoch. Я в состоянии преобразовать дату в моем ЗЕЬЕСТЕ, используя этот текст:SQL Epoch Time «Where» Statement

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

мне пришлось использовать «час, -4», чтобы преобразовать его восточное время перехода на летнем. Мне интересно, если мне нужно будет отрегулировать это до -5 в ноябре, когда закончится летнее время? Есть ли способ сформулировать инструкцию SELECT, чтобы она автоматически настраивалась для DST? Это будет частью автоматизированного отчета, и я боюсь, что мы можем пропустить изменение этого значения.

Другой вопрос: как использовать инструкцию WHERE для получения данных за определенный день. Например, если бы я хотел, чтобы оператор WHERE захватывал все записи, которые произошли в любое время сегодня (7/14/16), как мне это сделать? Я попытался это заявление:

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

Он появляется только захватить записи, которые в точности равна полуночи того же дня (я думаю). Я хочу, чтобы все записи происходили в любое время дня.

Заранее за вашу помощь.

+0

Вы можете использовать GetUTCDate() для вычисления текущего смещения вместо жесткого кодирования. 'SELECT DATEDIFF (hour, GetUTCDate(), GETDATE())' --Сообщение SQL Server –

+1

Используете ли вы SQL Server? Если да, добавьте этот тег в свой вопрос. –

+0

Возможно, вам понадобится [создать пользовательскую функцию] (http://stackoverflow.com/questions/19732896/how-to-create-daylight-savings-time-start-and-end-function-in-sql-server) для обработки летнего времени. –

ответ

0

легкая часть первая:

Если вам нужно сравнить только дату, конвертировать DateTimes датам до сравнения с: CONVERT (дата, yourdatefield)

Вторая часть была обсуждена и решена здесь для UTC: Convert Datetime column from UTC to local time in select statement. Вам все равно нужно добавить в смещение для Epochtime.

+0

Я смог получить функцию GetUTCDate, чтобы настроить DST. Я не могу понять, как запустить функцию CONVERT. Он продолжает давать мне сообщение об ошибке «преобразование не удалось при преобразовании даты и/или времени», когда я запускаю CONVERT (дата, «время события») = '2016-07-11 «Любые идеи? Кроме того, любая идея, что я буду использовать, чтобы автоматически использовать вчерашнюю дату вместо жесткого кодирования? – AdamH

+0

Можете ли вы вставить фактическое сообщение? –

+0

Я, наконец, получил его работу. Я думаю, мне не понравилось, что я назвал столбец, который я назвал «Время события» в качестве входного. Мне пришлось использовать преобразование всего времени из инструкции SELECT в инструкции WHERE. Ниже приведен оператор WHERE и инструкция SELECT. SELECT DATEADD (час, DATEDIFF (час, GetUTCDate(), GETDATE()), DATEADD (SECOND, aa.fdTimeOfEvent, '1970-01-01 00:00:00')) DATEADD (dd, 0, DATEDIFF (dd, 0, DATEADD (час, DATEDIFF (час, GetUTCDate(), GETDATE()), DATEADD (SECOND, aa .fldTimeOfEvent, '1970-01-01 00:00:00')))) = CONVERT (дата, GETDATE()) – AdamH

0

Я предполагаю, что вы используете SQL Server. Если вы только когда-нибудь понадобится текущее смещение, вы можете использовать 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/