【问题标题】:Convert different time zone in SQL Server在 SQL Server 中转换不同的时区
【发布时间】:2015-03-20 13:16:35
【问题描述】:

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

它应该基于Bias & DayLightBias。

例如:东部时间的偏差值为 300,DaylightBias 值为 -60,IST 的偏差值为 -330,DayLightBias 值为 -60。

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

【问题讨论】:

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


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

      除了基本偏移和 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,最后的数字选项在项目的自述文件中有说明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多