Согласно документам MSDN:
Синтаксис метки времени устарел. Эта функция в обслуживании
режим и может быть удален в будущей версии Microsoft SQL Server.
Избегайте использования этой функции в новых разработках и планируйте изменить
приложения, которые в настоящее время используют эту функцию.
Используйте тип данных binary(8)
или varbinary(8)
, если хотите nullable
отметка времени:
create table C (
user_id integer,
unix_timestamp binary(8),
platform varchar(50),
Action varchar(50)
);
Как сказано в документе MSDN:
Метка времени является синонимом типа данных rowversion и является предметом
к поведению синонимов типа данных. В выражениях DDL используйте
везде, где это возможно, вместо строки времени Не обнуляемый
Столбец rowversion семантически эквивалентен двоичному (8) столбцу.
Nullable rowversion столбец семантически эквивалентен
столбец varbinary (8).
UPDATE:
AS MSDN говорит , что вы не можете преобразовать TIMESTAMP SQL Server в дату / время - это просто не date/time
:
Это тип данных, который предоставляет автоматически сгенерированный, уникальный двоичный файл
числа в базе данных. rowversion обычно используется в качестве механизма
для версионно-штамповочных строк таблицы. Тип данных rowversion является просто
увеличивая число и не сохраняя дату или время. Записать
дата или время, используйте тип данных datetime2.
Но вы можете попробовать. Полный пример:
CREATE table C (
user_id integer,
unix_timestamp binary(8),
platform varchar(50),
Action varchar(50)
)
Затем вставьте данные. У меня здесь метка времени Unix :
INSERT INTO dbo.C
(
user_id,
unix_timestamp,
platform,
Action
)
VALUES
( 1, -- user_id - int
1501688421, -- unix_timestamp - binary(8)
'Android', -- platform - varchar(50)
'A' -- Action - varchar(50)
)
SELECT
c.unix_timestamp
, DATEADD(S, c.unix_timestamp, '1970-01-01')
FROM dbo.C c
ВЫВОД:
2017-08-02 15:40:21.000
Или просто создайте таблицу с правильным типом данных:
create table C (
user_id integer,
unix_timestamp DateTime2,
platform varchar(50),
Action varchar(50)
);