2013-11-14 19 views
0

我在我的数据库中有一个datetime字段,并且我需要得到自纪元以来的毫秒数。我可以在客户端应用程序上计算,但我的问题是,是否有办法从SQL服务器获取它。如何使MS SQL Server返回存储在日期时间字段中的毫秒数?

我尝试这样做:

select cast(dateField as bigint) from table where id = 0 

...但我得到的不可能是我想要的一个5位数字。

这是否可能?

+0

你在谈论转换为UNIX时间? –

+0

@马丁史密斯:我在毫秒的思考,但我也会很高兴。 – Smig

回答

1

尝试是这样的(对于系统日期 - 修改把你的日期在那里):

SELECT cast(DATEDIFF(s, '19700101', GETDATE()) as bigint) * 1000 
+0

也许应该添加'DATEPART(ms,datefield)'。 –

0

我想...投(作为的DateField BIGINT)......但我得到一个五位数

Sql Server将日期时间存储为一个8字节的浮点值,其中整数部分是整天数,小数部分是小数部分。投到任何整数类型会给你几天,而不是毫秒。

我需要从纪元

你是什么时代的毫秒数? Sql Server使用1/1/1900(它会在此之前存储日期的负值),但很多人预计在1970年1月1日。

有了这些想法,你想要执行下列操作之一:

DATEDIFF(millisecond, '19700101', datefield) 
DATEDIFF(millisecond, 0, datefield) 
+1

它实际上存储为两个连接在一起的“int”值。一个有天数,另一个有滴答数。 (SELECT CAST(GETDATE()AS BINARY(8)))T(作为INT的选择CAST(SUBSTRING(B,1,4))作为天,CAST(SUBSTRING(B,5,4) B)' –

+1

其中tick = 1/300秒。 (这是特定于日期时间; datetime2当然是完全不同的) – Andrew

+1

而'DATEDIFF(毫秒)的问题是,这溢出,除非日期在一个狭窄的范围。 –

0
select CONVERT (varchar(20), tdate,113) from tblTrainingMaster 

而不是

select CONVERT (varchar(20), tdate,120) from tblTrainingMaster 
相关问题