2013-02-24 21 views
17

SQL Server'da Verilen bir datetimeoffset(7) ofsetini bulmam gerekiyor.SQL Server'da datetimeoffset ofset alma

Belgeleri araştırdım ve belirli bir değerin ofsetini bilmemenin bir yolu değil, ofseti değiştirmenin tüm yolları var.

Ben işe yaramış gibi görünse de, çok karmaşık bulduğum aşağıdaki kod parçası ile geldim.

DECLARE @datetimeOffset datetimeoffset(7) 

SET @datetimeOffset = CAST('2007-05-08 22:35:29.1234567-05:00' AS datetimeoffset(7)) 

DECLARE @result datetimeoffset(7) 
DECLARE @offsetMin int 

SET @offsetMin = DATEDIFF(mi, cast(SWITCHOFFSET(@datetimeOffset, '+00:00') as datetime), cast(@datetimeOffset as datetime)) 

SELECT @offsetMin 

Hala 00 dönüştürmeyi yapmak zorunda: 00 formatında ama bunu yapmanın daha iyi bir yolu olup olmadığını kontrol etmek istedim.

Teşekkürler!

cevap

30

Datepart işlevi, bir saat dilimi ofseti olan bir tz seçeneğine sahiptir.

datepart(tz,@datetimeoffset) 
+6

Ayrıca DATENAME (tz, @datetimeoffset) ofsetini bir varchar olarak almak için de alabilirsiniz. –

+4

'TZOFFSET'' tz' yerine çalışır ve değerinin ne olduğu SSMS sözdizimi vurgulayıcı tarafından tanınır. –

+0

Bu yalnızca SSMS 2012+ sürümlerinde çalışır – codeMonkey