2009-07-24 3 views
3

Ich bin auf der Suche nach einer effizienten SQL Server-Funktion (in meinem Fall 2005), um einen Unix-Zeitwert in eine SQL Server Datetime zu konvertieren, mit lokaler Zeit (insbesondere unter Berücksichtigung der Sommerzeit Anpassung - gerade dh nicht 01.01.1970 in Sekunden) ZugabeSQL Server-Funktion zum Konvertieren von Unix-Zeit zu lokalen Datetime

+0

Verwenden Sie bitte "SQL Server", um auf das Produkt und den SQL-Server im Tag zu verweisen. Vermeidet Verwirrung mit "MySql", und MSSQL gibt es nicht. –

+2

Es gibt vielleicht kein solches Produkt, aber es ist eine sehr häufig verwendete Abkürzung und Sie schwimmen dort gegen den Strom. Eine Suche auf Google gibt neuneinhalb Millionen Zugriffe zurück, von denen der erste die Microsoft SQL Server-Homepage ist. – Cruachan

Antwort

2
SELECT DATEADD(second, @ts, {d '1970-01-01'}) as MSSQLdatetime 

Nachdem Sie das Datum haben, können Sie nun über den Zeitpunkt für das zurückgegebene Datum auf dem DST-Zustand abhängig machen dateadd. Um zu überprüfen, für DST müssen Sie irgendeine Form von Funktion, Beispiel:

CREATE function [dbo].[fn_GetDaylightSavingsTimeStart] 
(@Year varchar(4)) 
RETURNS smalldatetime 
as 
begin 
declare @DTSStartWeek smalldatetime, @DTSEndWeek smalldatetime 
set @DTSStartWeek = '03/01/' + convert(varchar,@Year) 
return case datepart(dw,@DTSStartWeek) 
when 1 then 
    dateadd(hour,170,@DTSStartWeek) 
when 2 then 
    dateadd(hour,314,@DTSStartWeek) 
when 3 then 
    dateadd(hour,290,@DTSStartWeek) 
when 4 then 
    dateadd(hour,266,@DTSStartWeek) 
when 5 then 
    dateadd(hour,242,@DTSStartWeek) 
when 6 then 
    dateadd(hour,218,@DTSStartWeek) 
when 7 then 
    dateadd(hour,194,@DTSStartWeek) 
end 
end 

Sie benötigen eine simular Funktion zu finden, wenn die Sommerzeit endet, werfen Sie einen Blick auf dieser Website für weitere Informationen: http://www.mssqltips.com/tip.asp?tip=1372

+0

Lokale Zeit, dies berücksichtigt keine Sommerzeitanpassungen. – Cruachan

+0

Ich habe die Antwort so bearbeitet, dass sie eine Beispielfunktion enthält Sie Informationen über die Sommerzeit und wann es beginnt. Sie können dann einen CASE in Ihrer SQL-Anweisung verwenden, um der Ausgabespalte die erforderlichen Stunden hinzuzufügen. – Espo

1

besser?

CREATE FUNCTION [dbo].[UnixTimestampToGMTDatetime] 
(@UnixTimestamp bigint) 
RETURNS datetime 
AS 
BEGIN 
     DECLARE @GMTDatetime datetime 
     select @GMTDatetime = 
     CASE 
     WHEN dateadd(ss, @UnixTimestamp/1000, '1970-01-01') 
     BETWEEN 
      Convert(DATETIME, Convert(VARCHAR(4), Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))) + '-03-' + Convert(VARCHAR(2), (31 - (5 * Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))/4 + 4) % 7)) + ' 01:00:00', 20) 
     AND 
      Convert(DATETIME, Convert(VARCHAR(4), Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))) + '-10-' + Convert(VARCHAR(2), (31 - (5 * Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))/4 + 1) % 7)) + ' 02:00:00', 20) 
     THEN Dateadd(hh, 1, dateadd(ss, @UnixTimestamp/1000, '1970-01-01')) 
     ELSE Dateadd(hh, 0, dateadd(ss, @UnixTimestamp/1000, '1970-01-01')) 
     END 
RETURN @GMTDatetime  
END 
Verwandte Themen