【问题标题】:MSSQL - Convert milliseconds since 1970 to datetime2MSSQL - 将自 1970 年以来的毫秒转换为 datetime2
【发布时间】:2013-01-20 22:10:02
【问题描述】:

考虑以下查询(在 MSSQL 2008 中):

SELECT dateModified FROM SomeTable;

这将返回 javascript 格式的浮点数(自 1970 年以来的毫秒数):

dateModified 
============ 
1301598290687 
1071003581343 
1311951478593

如何在选择中将其转换为 datetime2?

【问题讨论】:

    标签: sql sql-server-2008 datetime


    【解决方案1】:

    使用来自@Mikeal Eriksson's answer here 的公式。

    我会将浮点数转换为 bigint,然后创建日期时间:

    select 
      DATEADD(MILLISECOND, 
              cast(dateModified as bigint) % 1000, 
              DATEADD(SECOND, cast(dateModified as bigint) / 1000, '19700101'))
    from sometable
    

    SQL Fiddle with Demo

    【讨论】:

      【解决方案2】:

      一些 Oracle 示例 - 将 to_date() 替换为等效项:

        SELECT (1301598290687/60/60/24/1000) as Days
         , to_date('01-01-1970','dd-mm-yyyy') as start_date
         , to_date('01-01-1970','dd-mm-yyyy')+(1301598290687/60/60/24/1000) as converted_date
        FROM dual
        /
      
      DAYS                START_DATE      CONVERTED_DATE
      ---------------------------------------------------------
      15064.7950310995    1/1/1970        3/31/2011 7:04:51 PM
      

      创建双表:

      CREATE TABLE DUAL
      (
      DUMMY VARCHAR(1)
      )
      GO
      INSERT INTO DUAL (DUMMY)
       VALUES ('X')
      GO
      

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 2023-01-08
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多