我要创建下表:
user_id unix_timestamp platform Action
1 1501688421118 IOS A
我的创建表是:
create table C (
user_id integer,
unix_timestamp timestamp,
platform varchar(50),
Action varchar(50)
);
然后我要插入行:
INSERT INTO C
VALUES ('1', 1501688421118, 'IOS','A');
我遇到错误,我尝试使用varbinary(8)而不是时间戳,但是当我执行插入操作时,我是unix_timestamp列中的二进制结果,而不是1501688421118。
答案 0 :(得分:0)
不建议使用时间戳语法。此功能正在维护中 模式,并且可能会在将来的Microsoft SQL Server版本中删除。 避免在新的开发工作中使用此功能,并计划进行修改 当前使用此功能的应用程序。
如果要使用binary(8)
时间戳记,请使用数据类型varbinary(8)
或nullable
:
create table C (
user_id integer,
unix_timestamp binary(8),
platform varchar(50),
Action varchar(50)
);
时间戳记是rowversion数据类型的同义词,它是主题 数据类型同义词的行为。在DDL语句中,使用 尽可能使用rowversion代替时间戳。不可为空 rowversion列在语义上等效于binary(8)列。一种 可为空的rowversion列在语义上等效于 varbinary(8)列。
更新:
MSDN上说您不能将SQL Server TIMESTAMP转换为日期/时间-它不是date/time
:
是公开自动生成的唯一二进制数据的数据类型 数据库中的数字。行版本通常用作一种机制 用于版本标记表行。 rowversion数据类型只是 递增数字,不保留日期或时间。记录 日期或时间,请使用datetime2数据类型。
但是您可以尝试一下。完整示例:
CREATE table C (
user_id integer,
unix_timestamp binary(8),
platform varchar(50),
Action varchar(50)
)
然后插入数据。我有Unix Timestamp here:
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)
);