2015-10-13 49 views
1

我想用SQL Server中的函數GETUTCDATE()添加我的時區。我搜索了幾次,但沒有找到任何相關的解決方案。提前致謝。GETUTCDATE()和時區(SQL Server)

+0

而不是'GETUTCDATE'使用[SYSDATETIMEOFFSET()](https://msdn.microsoft.com/en-us/library/bb677334.aspx)。它將返回一個包含機器時區偏移量的「datetimeoffset」值。如果要將其切換爲另一個偏移量,請使用[SWITCHOFFSET](https://msdn.microsoft.com/en-us/library/bb677244.aspx) –

回答

-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') 
+0

這不是夏時制時間。失敗 – Aflred

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 
+0

所有轉換爲並從varchars和dateadd,是不必要的。只需使用'SYSDATETIMEOFFSET'而不是'GETUTCDATE'並且'AT TIME ZONE'將正確轉換。 –

0

從SQL Server 2016向前(和SQL Azure的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'

相關問題