我需要从表中恢复日期时间并将其转换为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的数据库字段。
非常感谢!
答案 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