我想在SQL Server 2008中将东部时间("GMT-05:00")转换为IST("GMT+05:30")。
它应该基于偏见&DayLightBias。
例如:东部时间的偏差值为300&DaylightBias值-60&IST具有偏置值-330&DayLightBias值-60。
我知道如何在C#中转换它,但我想创建一个作业,为此我需要在SQL Server中进行转换。
在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
- MSDN SQL Server联机丛书
DATETIMEOFFSET
文档 - MSDN SQL Server联机丛书
SWITCHOFFSET
文档
除了基准偏移和dst偏移之外,还有很多事情需要考虑。具体来说,不同的偏移量在不同日期和不同时间的标准时间和夏令时之间切换。
正确的方法是使用命名时区。与许多其他数据库不同,SQL Server不支持时区。它只支持时区偏移。请参阅时区标记wiki中的"时区!=偏移量"。
幸运的是,我为你做了所有的艰苦工作。使用我的SQL Server时区支持项目,您可以编写以下查询:
SELECT Tzdb.ConvertZone(yourDateTimeValue, 'America/New_York', 'Asia/Kolkata', 1, 1)
时区是标准的IANA tz数据库标识符,最后的数字选项在项目的自述中进行了解释。