Tsql UTC日期至CST日期

Tsql UTC日期至CST日期,tsql,Tsql,我需要帮助将保存为bigint编号1538397000000的UTC日期转换为CST日期时间。 我试过了 select Dateadd(s,convert(Bigint,1538397000000/1000,convert(datetime,'1-1-1970')) 您可以创建一个将UTC转换为本地时间的函数。假设上面的代码正确地将bigint转换为正确的UTC日期/时间值,那么下面的代码将该值转换为CST create function UTCDateTime

我需要帮助将保存为bigint编号1538397000000的UTC日期转换为CST日期时间。 我试过了

       select 
        Dateadd(s,convert(Bigint,1538397000000/1000,convert(datetime,'1-1-1970'))

您可以创建一个将UTC转换为本地时间的函数。假设上面的代码正确地将bigint转换为正确的UTC日期/时间值,那么下面的代码将该值转换为CST

create function UTCDateTimeToLocal(@value datetime) returns datetime as
begin
  declare @utc datetime = getutcdate()
         ,@local datetime = getdate()
         ,@diff int
         ,@rtn datetime

  set @diff = datediff(millisecond, @utc, @local)
  set @rtn = dateadd(millisecond, @diff, @value)

  return @rtn
end
go

select dbo.UTCDateTimeToLocal(dateadd(s,cast(1538397000000/1000 as bigint),convert(datetime,'1-1-1970')))

--drop function UTCDateTimeToLocal

为什么一开始就将日期存储为大整数?为什么不将它们正确地存储为Date或DateTime2?这是来自供应商的数据,也是它们存储数据的方式。在SQl Server 2016中无法识别UTCDateTimeLocal我忘记了UTCDateTimeToLocal是我编写的函数。我更新了答案以包含函数的SQL。我使用它太久了,我以为它是SQL Server的一部分。。。对不起!