【问题标题】:DateTime to milliseconds from midnightDateTime 从午夜到毫秒
【发布时间】: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 中是否有任何简单的方法可以做到这一点?

【问题讨论】:

    标签: sql-server-2005 datetime


    【解决方案1】:
    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 你知道,使用 SQL Server 2008 和日期类型不是更容易吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 我不介意这个版本 - 但是 60 * Hours 应该是 3600
    • 没有。它从右到左读取。它将小时转换为分钟,然后将其添加到分钟。接下来,它将该数字转换为秒并将其添加到秒。接下来,它将该数字转换为毫秒并将其添加到毫秒。
    • +1;我更喜欢这种方法,但解决了几秒钟。我也是从左到右写的:((DATEPART(HOUR, d)) * 60 + DATEPART(MINUTE, d)) * 60 + DATEPART(SECOND, d)
    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多