我想在SQL Server中使用函数GETUTCDATE()添加我的时区。我搜索过几次,但没有找到任何相关的解决方案。提前谢谢。
答案 0 :(得分:1)
仅适用于sql 2016 ,它会考虑夏令时。
CREATE FUNCTION GetBelgiumTime
(
)
RETURNS datetime2
AS BEGIN
declare @dateoffset datetimeoffset
SET @dateoffset = convert(VARCHAR(2000),(SELECT GETUTCDATE() AT TIME ZONE 'Central European Standard Time'),126 )
declare @date datetime2
set @date = convert(datetime2, LEFT(@dateoffset,28),126)
set @date = DATEADD(HOUR, convert(int,LEFT(RIGHT(@dateoffset,5), 2)), @date)
RETURN @date
END
select dbo.GetBelgiumTime() as BelgiumDateAndTime
答案 1 :(得分:0)
从SQL Server 2016转发(和Azure SQL DB),您可以这样做:
SELECT SYSDATETIMEOFFSET() AT TIME ZONE @tz
其中@tz是有效的Windows时区标识符,例如'Pacific Standard Time'
,'Central European Standard Time'
等。
但是,如果您使用的是旧版本的SQL Server,或者更喜欢使用IANA时区标识符,则可以使用我的SQL Server Time Zone Support项目执行以下操作:
SELECT Tzdb.UtcToLocal(GETUTCDATE(), @tz)
其中@tz
是IANA标准时区名称,例如'America/Los_Angeles'
或'Europe/Budapest'
。
答案 2 :(得分:0)
使用GETDATE()
代替GETUTCDATE()
。看到这个link
答案 3 :(得分:-1)
您可以尝试使用switchoffset
,如下所示:
select switchoffset(CAST(myDate as datetimeoffset),'+05:30') from someTable
您可以指定时区值,而不是'+05:30'
。
如果您想将时区与GETUTCDATE()一起使用,那么只需像这样添加
select cast(GETUTCDATE() as varchar(20)) + '+5:30'
如果您想将其保留为日期
select switchoffset(CAST(GETUTCDATE() as datetimeoffset),'+05:30')