SQL Server - converting 13 digit numeric to datetime

前端 未结 3 1750
一向
一向 2021-01-19 07:52

How can I convert a 13 digit numeric like 1314637182953 to datetime in SQL Server? Both casting and converting directly give an arithmetic overflow error!

相关标签:
3条回答
  • 2021-01-19 08:09

    We are far enough past the epoch (1/1/1970) that you may get an overflow error with the above code.
    It can be fixed easily by casting the field in question as a BIGINT data type before dividing by 1000 as below:

    DATEADD(SECOND, CAST(START_DATE as BIGINT)/1000 ,'1970/1/1')
    
    0 讨论(0)
  • 2021-01-19 08:22

    Assuming it's UNIX time in milliseconds, try this:

    DATEADD(SECOND, START_DATE/1000 ,'1970/1/1')
    

    For the number from your post, SQL-2008 returns 2011-08-29 16:59:42.000

    0 讨论(0)
  • 2021-01-19 08:31

    If you don't want to chop off the miliseconds:

    CAST(DATEADD(ms, CAST(RIGHT(START_DATE,3) AS smallint), DATEADD(s, START_DATE / 1000, '1970-01-01')) AS datetime2(3))
    
    0 讨论(0)
提交回复
热议问题