2

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

4

3 回答 3

3

这假定时间戳是自 UNIX 纪元以来的 ms。它仅转换为最接近的秒数,但您可以向其添加 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
于 2012-07-20T16:40:10.970 回答
1

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

每个数据库都有一个计数器,对于在数据库中包含 rowversion 列的表执行的每个插入或更新操作,该计数器都会递增。此计数器是数据库行版本。这跟踪数据库中的相对时间,而不是可以与时钟关联的实际时间。

...

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

于 2012-07-20T16:41:26.493 回答
1

您可以通过这种方式稍微靠近一点:

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

结果:

2010-08-09 18:41:00.000
于 2012-07-20T16:45:34.780 回答