У меня есть хранимая процедура, которая объединяет две таблицы данных бронирования отелей, однако API, из которого я извлекаю свои данные, использует время Unix. Мне нужно преобразовать это в DateTime, чтобы оно соответствовало полям моей компании.
В настоящее время моя конверсия выглядит так.
IIF([start] IS NOT NULL,
CONVERT(varchar(10), [start], 103),'') as 'ArrivalDate'
Это просто возвращает значение 1547310796, поэтому преобразование не было выполнено.
Как мне преобразовать значение, чтобы оно соответствовало 103 Date Time?


Это должно сделать это:
SELECT DATEADD(second, 1547310796 - DATEDIFF(second, GETDATE(), GETUTCDATE()), '1970-01-01')
Часть DATEDIFF(second, GETDATE(), GETUTCDATE()) покажет вам, как далеко вы находитесь на позади от времени UTC. Вам нужно вычесть это количество секунд из метки времени UTC, чтобы получить местное время.
работает на Oracle/Sql
select TO_date ('19700101000000','YYYYMMDDHH24MISS') + NUMTODSINTERVAL(<YOUR_COLUMN>+ decode (sessiontimezone, '+01:00', 3600, '+02:00', 7200, 0) , 'SECOND') as ArrivalDate
Это Оракул(?). Вопрос помечен как "sql-сервер"
@HansKefing нет, не оракул.
""to_date" не является распознаваемым именем встроенной функции."
Я просто хотел вернуться к этому и добавить еще один ответ, который работает, если вам просто нужна дата, а не время.
SELECT cast(DATEADD(S,[start], '1970-01-01') as date) as 'ArrivalDate'
. . . Это связано с тем, что ваше базовое значение не соответствует желаемому формату (например,
date).