如果可能,需要在SQL Server中将此时间戳(001281379300724)转换为YYYY-MM-DD hh:mm:ss格式。有什么建议吗?
答案 0 :(得分: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
获得ms精度:(哎,可能是更好的方式)
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 :(得分:1)
简单的答案是,如果这是一个SQL时间戳列(a.k.a rowversion),则无法做到。根据类型的文档:
每个数据库都有一个计数器,该计数器针对每个插入或递增 在包含a的表上执行的更新操作 数据库中的rowversion列。这个计数器是数据库 rowversion。这会跟踪数据库中的相对时间,而不是数据库 可以与时钟关联的实际时间。
...
Transact-SQL时间戳数据类型与时间戳不同 ISO标准中定义的数据类型。
答案 2 :(得分:1)
你可以通过这种方式稍微靠近一点:
SELECT DATEADD(MINUTE, 1281379300724/1000/60, '19700101')
结果:
2010-08-09 18:41:00.000