2013-02-24 4 views
17

W SQL Server muszę znaleźć przesunięcie danego datetimeoffset(7).Uzyskiwanie przesunięcia datetimeoffset w SQL Server

Ja zbadałem dokumentację i są wszystkie sposoby na zmianę przesunięcia, ale nie sposób na poznanie przesunięcia określonej wartości (przepraszam, jeśli ją przegapiłem).

Cóż, wymyśliłem następujący fragment kodu, który wydaje mi się zbyt skomplikowany, chociaż wydaje się działać.

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 

mam jeszcze zrobić konwersję do +00: 00 formacie ale chciał sprawdzić, czy istnieje lepszy sposób to zrobić.

Dzięki!

Odpowiedz

30

Funkcja bloku danych ma opcję tz, która jest przesunięciem strefy czasowej w minutach.

datepart(tz,@datetimeoffset) 
+6

Możesz także uzyskać DATENAME (tz, @datetimeoffset), aby uzyskać offset jako varchar. –

+4

'TZOFFSET' działa w miejsce' tz' i, o ile jest to warte, jest rozpoznawany przez zakreślacz składni SSMS. –

+0

Działa to tylko w SSMS 2012+ – codeMonkey