Вы можете попробовать использовать CAST и DATEADD :
DATEADD(
second,
SIGNAL.offset,
CAST(<your date string> as datetime)
AS TriggeredDateTime
Обновить ответ:
Решение по-прежнему основано наиспользование CAST и DATEADD , но, пожалуйста, немного измените для вашего sql.
Согласно моим нескольким тестам, я обнаружил, что CAST и DATEADD не могут анализировать nano
единицу, смотрите эту ссылку :
Так что моя идея - преобразовать nano
в microsecond
, затемПожалуйста, следуйте ниже sql:
WITH i AS (
SELECT
input.TriggeredDateTime.dateTime.date.year AS yr,
input.TriggeredDateTime.dateTime.date.month AS mnth,
input.TriggeredDateTime.dateTime.date.day AS date,
input.TriggeredDateTime.dateTime.time.hour AS hr,
input.TriggeredDateTime.dateTime.time.minute AS mnt,
input.TriggeredDateTime.dateTime.time.second AS sec,
input.TriggeredDateTime.dateTime.time.nano/1000 AS nano,
input.TriggeredDateTime.dateTime.offset.totalSeconds AS offset
FROM input
)
select
DATEADD(second,offset,
DATEADD(microsecond,nano,
CAST(CONCAT (i.yr,'-',i.mnth,'-',i.date,' ',i.hr,':',i.mnt,':',i.sec) as datetime)
)
) AS TriggeredDateTime
from i
Мой вывод с вами пример данных: