如何使用UNIX时间戳创建和插入记录-SQL Server 2014

时间:2019-01-11 10:15:18

标签: sql-server unix-timestamp

我要创建下表:

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。

1 个答案:

答案 0 :(得分:0)

According to MSDN docs:

  

不建议使用时间戳语法。此功能正在维护中   模式,并且可能会在将来的Microsoft SQL Server版本中删除。   避免在新的开发工作中使用此功能,并计划进行修改   当前使用此功能的应用程序。

如果要使用binary(8)时间戳记,请使用数据类型varbinary(8)nullable

create table C (
user_id integer,
unix_timestamp binary(8),
platform varchar(50),
Action varchar(50)   
);

As MSDN document says:

  

时间戳记是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)   
);