2013-02-05 48 views
3

考慮下面的查詢(在MSSQL 2008年):MSSQL - 轉換毫秒自1970年以來,以DATETIME2

SELECT dateModified FROM SomeTable; 

這將返回漂浮在javascript格式(自1970年以來毫秒):

dateModified 
============ 
1301598290687 
1071003581343 
1311951478593 

我怎樣才能將其轉換爲datetime2在選擇?

回答

8

使用@Mikeal Eriksson's answer here中的公式。

我會浮動轉換爲BIGINT,然後創建日期時間:

select 
    DATEADD(MILLISECOND, 
      cast(dateModified as bigint) % 1000, 
      DATEADD(SECOND, cast(dateModified as bigint)/1000, '19700101')) 
from sometable 

SQL Fiddle with Demo

-1

有些Oracle實例 - 取代TO_DATE()與eqivalent:

SELECT (1301598290687/60/60/24/1000) as Days 
    , to_date('01-01-1970','dd-mm-yyyy') as start_date 
    , to_date('01-01-1970','dd-mm-yyyy')+(1301598290687/60/60/24/1000) as converted_date 
    FROM dual 
/

DAYS    START_DATE  CONVERTED_DATE 
--------------------------------------------------------- 
15064.7950310995 1/1/1970  3/31/2011 7:04:51 PM 

創建雙表:

CREATE TABLE DUAL 
(
DUMMY VARCHAR(1) 
) 
GO 
INSERT INTO DUAL (DUMMY) 
VALUES ('X') 
GO 
相關問題