将UTC毫秒转换为SQL Server中的DATETIME

Moh*_*han 25 sql-server datetime sql-server-2005 utc

我想在UTC服务器中将UTC毫秒转换为DateTime.

这可以通过以下代码在C#中轻松完成:

DateTime startDate = new DateTime(1970, 1, 1).AddMilliseconds(1348203320000);
Run Code Online (Sandbox Code Playgroud)

我需要在SQL服务器中执行此操作.我在这里找到了一些脚本,但这是从1900-01-01开始的.

我已经使用了DATEADD下面的函数,但这是通过将毫秒作为差异给出算术溢出异常:

SELECT DATEADD(MILLISECOND,1348203320000,'1970-1-1')
Run Code Online (Sandbox Code Playgroud)

如何正确进行转换?

Mik*_*son 49

DECLARE @UTC BIGINT
SET @UTC = 1348203320997 

SELECT DATEADD(MILLISECOND, @UTC % 1000, DATEADD(SECOND, @UTC / 1000, '19700101'))
Run Code Online (Sandbox Code Playgroud)

  • @Oleksandr `选择 dateadd(毫秒,@UTC % 86400000,dateadd(日,@UTC / 86400000,'19700101'));` (3认同)

小智 5

在将毫秒转换为日期时间的函数下方

IF object_id('dbo.toDbTimeMSC', 'FN') IS NOT NULL DROP FUNCTION dbo.toDbTimeMSC
GO
CREATE FUNCTION [dbo].[toDbTimeMSC] (@unixTimeMSC BIGINT) RETURNS DATETIME
BEGIN
    RETURN DATEADD(MILLISECOND, @unixTimeMSC % 1000, DATEADD(SECOND, @unixTimeMSC / 1000, '19700101'))
END
GO
Run Code Online (Sandbox Code Playgroud)

-- 选择 dbo.toDbTimeMSC(1348203320000)