【发布时间】:2013-03-26 10:32:37
【问题描述】:
我有一个值为 2013-03-22 15:19:02.000 的“日期时间”列
我需要将此值转换为纪元时间并将其存储在“bigint”字段中
上述时间的实际epoch值是,1363945741898,当我使用时
select DATEDIFF(s, '1970-01-01 00:00:00', '2013-03-22 15:19:02.000')
我知道,1363965542,当我使用时
select DATEDIFF(ms, '1970-01-01 00:00:00', '2013-03-22 15:19:02.000')
我明白了,
消息 535,第 16 级,状态 0,第 1 行 datediff 函数导致溢出。分隔两个日期/时间实例的日期部分的数量太大。尝试将 datediff 与不太精确的日期部分一起使用。
如何从'datetime'字段中获取精确的纪元值
我使用 SQL Server 2008。这也应该适用于 2005。
【问题讨论】:
-
您的日期时间在哪个时区?距离格林威治标准时间有几个半小时的路程。也许在印度? (我想知道 SQL Server 是否可能使用 GMT 作为 1970-01-01 的时区,因为它没有可以追溯到那么远的时区信息,以及 2013 年的本地时区。)
-
你说要以epoch value = unix time,也就是以秒为单位,那为什么第二次查询时要以毫秒为单位查询呢?
-
@MattGibson India IST
-
人力资源部。出于好奇,
select DATEDIFF(s, '1970-01-01 00:00:00Z', '2013-03-22 15:19:02Z')给了你什么? (使用 Z 应该产生一个基于 GMT 而不是日期时间的日期时间偏移量。) -
@aweis 我应该以毫秒为单位存储它
标签: sql-server datetime