Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 从午夜到毫秒的日期时间_Sql Server 2005_Datetime - Fatal编程技术网

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)