如果可能,需要在 SQL Server 中将此时间戳 (001281379300724) 转换为 YYYY-MM-DD hh:mm:ss 格式。有什么建议么?
问问题
345 次
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 回答