2012-07-20 77 views
2

如果可能,需要將此時間戳(001281379300724)轉換爲SQL Server中的YYYY-MM-DD hh:mm:ss格式。有什麼建議麼?這是什麼日期格式? (001281379300724)

+2

如果我們粗略地知道,你得到了,怎麼說「時間戳」中的「時間戳」這將有助於被創建,等等...... – Adam 2012-07-20 16:31:20

+3

這是自UNIX時代以來最可能的秒數。在這個例子中,你鏈接的是Mon,2010年8月9日18:41:40 GMT。 – orlp 2012-07-20 16:32:01

+2

自1971年以來的毫秒數是多少? UNIX時間 – 2012-07-20 16:32:30

回答

3

這假定時間戳是從UNIX紀元開始的毫秒數。它只能轉換爲最接近的秒數,但你可以將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 

要獲得毫秒精度:(呸,可能是一個更好的方法)

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

簡單的答案是,如果這是一個SQL時間戳列(又名rowversion),你不能。每對的類型的文檔:

每個數據庫具有被遞增,其對包含在數據庫中一個 rowversion列的表中執行的每個刀片或 更新操作的計數器。此計數器是數據庫 rowversion。這跟蹤數據庫中的相對時間,而不是可以與時鐘關聯的實際時間。

...

在Transact-SQL時間戳數據類型不同於在ISO標準中定義的時間戳 數據類型不同。

1

你可以稍微接近這樣:

SELECT DATEADD(MINUTE, 1281379300724/1000/60, '19700101') 

結果:

2010-08-09 18:41:00.000