2012-07-20 76 views
2

如果可能,需要将此时间戳(001281379300724)转换为SQL Server中的YYYY-MM-DD hh:mm:ss格式。有什么建议么?这是什么日期格式? (001281379300724)

+2

如果我们粗略地知道,你得到了,怎么说“时间戳”中的“时间戳”这将有助于被创建,等等...... – Adam 2012-07-20 16:31:20

+3

这是自UNIX时代以来最可能的秒数。在这个例子中,你链接的是Mon,2010年8月9日18:41:40 GMT。 – orlp 2012-07-20 16:32:01

+2

自1971年以来的毫秒数是多少? UNIX时间 – 2012-07-20 16:32:30

回答

3

这假定时间戳是从UNIX纪元开始的毫秒数。它只能转换为最接近的秒数,但你可以将ms添加到它(见下文)。它需要使用两个步骤,因为dateadd需要一个int。首先通过除以60000来添加分钟,然后添加秒。

DECLARE @yournum bigint 
SET @yournum = 1281379300724  
SELECT DATEADD(ss, (@yournum/1000)%60 , (DATEADD(mi, @yournum/1000/60, '19700101'))) 

给人

2010-08-09 18:41:40.000 

要获得毫秒精度:(呸,可能是一个更好的方法)

DECLARE @yournum bigint 
SET @yournum = 1281379300724  
SELECT DATEADD(ms, (@yournum%1000),DATEADD(ss, (@yournum/1000)%60 , (DATEADD(mi, @yournum/1000/60, '19700101')))) 

给人

2010-08-09 18:41:40.723 
1

简单的答案是,如果这是一个SQL时间戳列(又名rowversion),你不能。每对的类型的文档:

每个数据库具有被递增,其对包含在数据库中一个 rowversion列的表中执行的每个刀片或 更新操作的计数器。此计数器是数据库 rowversion。这跟踪数据库中的相对时间,而不是可以与时钟关联的实际时间。

...

在Transact-SQL时间戳数据类型不同于在ISO标准中定义的时间戳 数据类型不同。

1

你可以稍微接近这样:

SELECT DATEADD(MINUTE, 1281379300724/1000/60, '19700101') 

结果:

2010-08-09 18:41:00.000