Центр интернета вещей / потоковая аналитика — SQL — преобразование входящей временной метки в текущее время

#sql #azure #azure-iot-hub #stream-analytics

#sql #azure #azure-iot-hub #поток-аналитика

Вопрос:

У меня есть временная метка, поступающая в виде миллисекунд после 01.01.1970 ([временная метка] ниже — имя столбца для данных), и мне нужно добавить дополнительный столбец, который использует SQL для получения этих миллисекунд и преобразования его в формат даты / времени.

Я попытался:

 SELECT DATEADD(MILLISECOND, [timestamp] %1000, DATEADD(SECOND, [timestamp] /1000, '19700101'))
 

Я получаю сообщение об ошибке:

Не удается преобразовать значение ‘19700101’ типа ‘nvarchar (max)’ в тип ‘datetime’ в выражении ‘DATEADD (SECOND, [отметка времени] / 1000 , ‘19700101’ )’. В строке «2» и столбце «152».

Любая помощь приветствуется, спасибо! — M

Комментарии:

1. пожалуйста, укажите формат даты.

2. вместо этого нужно было указать 19700101 в формате временной метки ISO? итак, «1970-01-01T00:00:00Z»?

3. @silent как выглядят данные временной метки, вы можете мне их показать?

4. @leon Yue Поступающий формат данных временной метки выглядит следующим образом: 1607040000021. Быстрый поиск в Google показывает, что это может называться «Эпоха UNIX»?

5. @Silent Я еще не пробовал этого, к сожалению, я не могу изменить формат данных до того, как он попадет в IoT Hub, изменить его можно, только запросив его через Stream Analytics.

Ответ №1:

Вместо этого вам нужно указать 19700101 формат временной метки ISO, поэтому 1970-01-01T00:00:00Z

 SELECT DATEADD(MILLISECOND, [timestamp] %1000, DATEADD(SECOND, [timestamp] /1000, '1970-01-01T00:00:00Z'))