Sql server 2005 从午夜到毫秒的日期时间
如何将给定的Sql server 2005 从午夜到毫秒的日期时间,sql-server-2005,datetime,Sql Server 2005,Datetime,如何将给定的DATETIME的时间部分转换为午夜后的毫秒数?比如说, '2011-08-29 00:00:00' -> 0 '2011-08-28 00:00:00' -> 0 '2011-08-29 01:00:00' -> 3600000 在SQLServer2005中有什么简单的方法可以做到这一点吗?有点不那么优雅,但是可以自我记录 WITH Dates(D) AS ( SELECT { ts '2011-08-29 00:00:00.000' } UNION ALL
DATETIME
的时间部分转换为午夜后的毫秒数?比如说,
'2011-08-29 00:00:00' -> 0
'2011-08-28 00:00:00' -> 0
'2011-08-29 01:00:00' -> 3600000
在SQLServer2005中有什么简单的方法可以做到这一点吗?有点不那么优雅,但是可以自我记录
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)))
我认为它在夏令时也会有不同的表现——这可能是好的,也可能是坏的,取决于需求。+1你知道,SQL Server 2008和日期类型不是更容易吗?我不介意这个版本——但是60*小时应该是3600小时而不是3600小时。从右到左读。它将小时转换为分钟,然后将其添加到分钟。接下来,它将该数字转换为秒,并将其添加到秒。接下来,它将该数字转换为毫秒,并将其添加到毫秒中。+1;我更喜欢这种方法,但几秒钟后就解决了。我还从左到右写了:
((DATEPART(HOUR,d))*60+DATEPART(MINUTE,d))*60+DATEPART(SECOND,d)