SQL Server查询将Date转换为Number

时间:2014-03-17 06:23:41

标签: sql sql-server sql-server-2008

我有一个查询:

  

Select Cast(Datediff(MINUTE, '19700101', Cast(GETDATE() As date)) As bigint) *60000 + Datediff(ms, '19000101', Cast(GETDATE() As time));

给出了输出:

1395065961607

Java

Date d = new Date(1395065961607L);

输出为:

Mon Mar 17 **22**:19:21 MYT 2014

但我的输出应为:

Mon Mar 17 **14**:19:21 MYT 2014

如何在查询中实现此目的?

1 个答案:

答案 0 :(得分:0)

您需要做的是考虑您的计算,考虑Java的标准基准时间(称为“纪元”,即1970年1月1日,格林威治标准时间00:00:00)。 Java标准基准时间的关键要素是“GMT”时区,您在上面的原始帖子中没有说明这一点。

因此,考虑到这一点,您必须按照以下方式考虑“时代”与当地时区的当前时刻:

SELECT (Cast(DateDiff(day, Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset), SysDateTimeOffset()) AS bigint) * 86400000)
       + DateDiff(millisecond, DateAdd(day, DateDiff(day, Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset), SysDateTimeOffset()), Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset)), SysDateTimeOffset())

我希望这会有所帮助。