从Sql server Datetime获取偏移量

时间:2014-05-23 07:10:41

标签: sql-server datetime datetimeoffset

我需要从表中恢复日期时间并将其转换为DateTimeOffset,但我需要使用正确的偏移量保存这些值,而不是当前的偏移量 例如:

(西班牙时区示例)

  • 如果我恢复2014/04/13 00:00:00,我需要2014/04/13 00:00:00 +02:00
  • 如果我恢复2014/02/13 00:00:00,我需要2014/02/13 00:00:00 +01:00

我知道如何使用C#,但我需要知道是否可以使用Sql Server,因为我必须进行迁移,将大量数据从具有datetime字段的数据库移动到具有datetimeoffset的数据库字段。

非常感谢!

1 个答案:

答案 0 :(得分:0)

你需要处理不明确的时间,如@Damien_The_Unbeliever所提到的,但这里是你如何计算偏移量(假设你的日期> = 1998)

SELECT YourDate,
       CASE WHEN YourDate < LocalSummerTimeStart 
                 OR YourDate > LocalSummerTimeEnd
            THEN 1
            ELSE 2
       END AS Offset
FROM YourTable
     CROSS APPLY (
         SELECT YEAR(YourDate) * 10000 +  300 + (31 - ((((5 * YEAR(Yourdate)) / 4) + 4) % 7)) AS UTCSummerTimeStartDate
               ,YEAR(YourDate) * 10000 + 1000 + (31 - ((((5 * YEAR(YourDate)) / 4) + 1) % 7)) AS UTCSummerTimeEndDate
     ) AS CA1
     CROSS APPLY (
         SELECT DATEADD(hour, 2, CONVERT(datetime, CONVERT(varchar(8), UTCSummerTimeStartDate), 112)) AS LocalSummerTimeStart
               ,DATEADD(hour, 3, CONVERT(datetime, CONVERT(varchar(8), UTCSummerTimeEndDate), 112)) AS LocalSummerTimeEnd
     ) AS CA2

european summer time formulas