【发布时间】:2011-08-29 09:16:44
【问题描述】:
如何将给定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 中是否有任何简单的方法可以做到这一点?
【问题讨论】:
如何将给定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 中是否有任何简单的方法可以做到这一点?
【问题讨论】:
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
【讨论】:
有点不那么优雅 - 但自我记录?
select DATEPART(MILLISECOND,d)+1000*(DATEPART(SECOND,d)+60*(DATEPART(MINUTE,d)+60*DATEPART(HOUR,d)))
我认为它在夏令时的表现也不同 - 根据要求可能是好是坏。
【讨论】:
((DATEPART(HOUR, d)) * 60 + DATEPART(MINUTE, d)) * 60 + DATEPART(SECOND, d)