Как преобразовать данные из numeric в дату в MS SQL
В MS SQL 2016 создано представление, из которого надо забирать данные. Одно из полей [AuditRecordCreationDate] должно содержать дату, но SSMS говорит, что его формат: AuditRecordCreationDate (numeric(19,0) Не Null) и данные в нем выглядят как 1526628000258
Как правильно преобразовать его в формат даты, чтобы забирать запросом и передавать в другую систему?
P.S. Пробовал разные варианты - разные ошибки:
cast(AuditRecordCreationDate as datetime) as NEWDATE,
Arithmetic overflow error converting expression to data type datetime.
cast(cast(AuditRecordCreationDate as nvarchar(40)) as datetime) as NEWDATE,
Conversion failed when converting date and/or time from character string.
Ответы (1 шт):
SELECT DATEADD(second, 1526628000258 / 1000, '1970-01-01 01:00:00.000');
-- или даже
SELECT DATEADD(millisecond, 1526628000258 % 1000,DATEADD(second, 1526628000258 / 1000, '1970-01-01 01:00:00.000'));
-- или уж совсем
SELECT DATEADD(millisecond, 1526628000258 % 1000, CAST(DATEADD(second, 1526628000258 / 1000, '1970-01-01 01:00:00.000') AS DATETIME2));
Во втором запросе получается 257 миллисекунд, а не 258 - но это не ко мне претензии...
Напрямую миллисекунды прибавить низзя - второй параметр должен помещаться в INT.