我们在SQL Server 2008中有数据,有多个日期时间列。由于SQL Server中的日期格式是一个大整数值,即自1970年以来的秒数,我们使用DATEADD()
函数将其转换为实际的日期时间格式。但我们面临的问题是,当我们使用DATEADD()时,我们以UTC时区获取数据,而我们需要EST中的数据。我尝试从当时只使用-4 HR,但在NOV - MAR期间我们提前1 HR因为当白天时间关闭时差异为5 HR。是否有任何可以使用的功能,考虑夏令时。任何帮助表示赞赏。
Current Function -> DATEADD(s, columnName, '01/01/1970 00:00:00')
问候,Sahil
答案 0 :(得分:0)
试试这个:
DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), columnName)
答案 1 :(得分:0)
您可以使用我的SQL Server Time Zone Support项目。它使用IANA标准时区名称as listed here。
根据您的示例,以下内容首先从UNIX时间戳转换为基于UTC的datetime
,然后转换为美国东部时区的datetime
。
SELECT Tzdb.UtcToLocal(DATEADD(s, columnName, '1970-01-01 00:00:00'), 'America/New_York')
答案 2 :(得分:-1)
我会写一个与时间数据库交互的UDF,例如来自worldtimeserver.com的数据库 - 我与他们没有关联,并通过快速的互联网搜索找到它。
进一步的研究表明,timezonedb.com拥有免费(如果是非商业性)会员资格,允许下载数据库,并提供有关如何使用SQL Server和MySQL的示例。