2011-08-29 91 views
1

如何將給定DATETIME時間時間的一部分轉換爲自午夜以來的毫秒數?例如,午夜時間到秒之間

'2011-08-29 00:00:00' -> 0 
'2011-08-28 00:00:00' -> 0 
'2011-08-29 01:00:00' -> 3600000 

有什麼簡單的方法可以在SQL Server 2005中執行此操作嗎?

回答

4
WITH Dates(D) AS 
(
SELECT { ts '2011-08-29 00:00:00.000' } UNION ALL 
SELECT { ts '2011-08-28 00:00:00.000' } UNION ALL 
SELECT { ts '2011-08-29 01:00:00.000' } 
) 
SELECT DATEDIFF(ms, 0, 
       DATEADD(Day, 0 - DATEDIFF(Day, 0, D), D)) 
FROM Dates 
+1

+1您知道,使用SQL Server 2008和日期類型不是更容易嗎? – gbn

2

有點不雅 - 但自我記錄?

select DATEPART(MILLISECOND,d)+1000*(DATEPART(SECOND,d)+60*(DATEPART(MINUTE,d)+60*DATEPART(HOUR,d))) 

我想這也表現不同圍繞夏令 - 這可能是好還是壞取決於需求。

+0

我不介意這個版本 - 但60 *小時應該是3600而不是 – fiat

+1

不。它從右到左讀。它將小時轉換爲分鐘,然後將其添加到分鐘。接下來,它將該數字轉換爲秒,並將其添加到秒。接下來,它將該數字轉換爲毫秒並將其添加到毫秒。 – Granger

+1

+1;我更喜歡這種方法,但解決了幾秒鐘。 (DATEPART(HOUR,D))* 60 + DATEPART(MINUTE,D))* 60 + DATEPART(SECOND,D)' – Bret