在SQL Server中转换不同的时区

时间:2015-03-20 13:16:35

标签: sql sql-server sql-server-2008 datetime timezone

我想将东部时间(" GMT-05:00")转换为SQL Server 2008中的IST(" GMT + 05:30")。

它应该基于偏见& DayLightBias

Ex:东部时间的偏差值为300& DaylightBias值-60& IST的偏差值为-330& DayLightBias值-60。

我知道如何在C#中转换它,但我想创建一个作业,为此我需要在SQL Server中进行此转换。

2 个答案:

答案 0 :(得分:0)

在SQL Server 2008或更高版本中使用DATETIMEOFFSET数据类型和SWITCHOFFSET方法:

-- define your input in Eastern Time
DECLARE @Input DATETIMEOFFSET = SYSDATETIME()
-- SET @Input = SWITCHOFFSET(@Input, '-05:00')
SET @Input = SWITCHOFFSET(@Input, -300)

DECLARE @output DATETIMEOFFSET

-- convert Eastern Time to IST
-- SET @output = SWITCHOFFSET(@input, '+05:30')
SET @output = SWITCHOFFSET(@input, 330)

SELECT @Input, @output

答案 1 :(得分:0)

除了基本偏移和dst偏差之外,还有很多事情要考虑。具体而言,不同的偏移在不同日期和不同时间在标准时间和日光时间之间切换。

正确的方法是使用指定的时区。与许多其他数据库不同,SQL Server没有时区的本机支持。它仅支持时区偏移。请参阅the timezone tag wiki中的“时区!=偏移”。

幸运的是,我已经为你完成了所有艰苦的工作。使用我的SQL Server Time Zone Support项目,您可以编写此查询:

SELECT Tzdb.ConvertZone(yourDateTimeValue, 'America/New_York', 'Asia/Kolkata', 1, 1)

时区是标准IANA tz database identifiers,最后的数字选项在项目的自述文件中有解释。