DateTime到午夜的毫秒数

时间:2011-08-29 09:16:44

标签: sql-server-2005 datetime

如何将给定DATETIME time 部分转换为午夜以来的毫秒数?例如,

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

在SQL Server 2005中有没有简单的方法呢?

2 个答案:

答案 0 :(得分: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 :(得分:3)

有点不那么优雅 - 但是自我记录?

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

我认为它在夏令时也有不同的表现 - 根据要求可能有好有坏。