2016-07-14 22 views
0

Ich habe zwei Fragen zum Abfragen von Daten in SQL, die Epochenzeitstempel verwendet. Ich bin in der Lage das Datum in meiner SELECT-Anweisung mit diesem Text zu konvertieren:SQL Epoch Time "Where" Anweisung

DATEADD(HOUR, -4, DATEADD(SECOND, aa.fldTimeOfEvent, '1970-01-01 00:00:00')) 

ich die „Stunde, -4“ verwenden, musste es Eastern Sommerzeit zu konvertieren. Ich bin gespannt, ob ich das im November auf -5 einstellen muss, wenn die Sommerzeit endet? Gibt es eine Möglichkeit, die SELECT-Anweisung so zu formulieren, dass sie sich automatisch an die Sommerzeit anpasst? Dies wird Teil eines automatisierten Berichts sein, und ich fürchte, wir können diesen Wert möglicherweise nicht ändern.

Eine weitere Frage ist, wie Sie die WHERE-Anweisung verwenden, um Daten für einen bestimmten Tag zu erhalten. Zum Beispiel, wenn ich wollte, dass die WHERE-Anweisung alle Einträge erfasst, die heute (14.7.16) auftraten, wie würde ich das tun? Ich habe diese Aussage versucht:

WHERE DATEADD(HOUR, -4, DATEADD(SECOND, aa.fldTimeOfEvent, '1970-01-01 00:00:00')) = '2016-07-14' 

Es scheint nur, um die Einträge zu ergreifen, die bis Mitternacht dieses Tages genau gleich sind (glaube ich). Ich möchte alle Einträge, die zu irgendeinem Zeitpunkt am Tag aufgetreten sind.

Vielen Dank im Voraus für Ihre Hilfe.

+0

Sie könnten GetUTCDate() verwenden, um den aktuellen Offset zu berechnen, anstatt ihn hart zu codieren. 'SELECT DATEDIFF (Stunde, GetUTCDate(), GETDATE())' --Assuming SQL Server –

+1

Verwenden Sie SQL Server? Wenn ja, füge diesen Tag bitte zu deiner Frage hinzu. –

+0

Möglicherweise müssen Sie [eine benutzerdefinierte Funktion erstellen] (http://stackoverflow.com/questions/19732896/how-to-create-daylight-savings-time-start-and-end-function-in-sql-server) Sommerzeit zu behandeln. –

Antwort

0

Der einfache Teil zuerst:

Wenn Sie das Datum nur zu vergleichen, konvertieren Sie Ihre Datetimes zu Tage, bevor mit Vergleich: CONVERT (Datum, yourdatefield)

Der zweite Teil wurde hier für UTC-Zeit diskutiert und gelöst: Convert Datetime column from UTC to local time in select statement. Sie müssten immer noch den Offset für Epochtime hinzufügen.

+0

Ich konnte die GetUTCDate-Funktion zur Anpassung für DST arbeiten. Ich kann nicht herausfinden, wie man die Funktion CONVERT zum Laufen bringt. Es zeigt mir immer die Fehlermeldung "Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit", wenn ich CONVERT (Datum, 'Zeitpunkt des Ereignisses') laufen lasse = '2016-07-11' Irgendwelche Ideen? Auch, irgendeine Idee, was ich verwenden würde, um es automatisch das gestrige Datum verwenden zu lassen, anstatt es hart zu kodieren? – AdamH

+0

Können Sie die eigentliche Nachricht einfügen? –

+0

Ich habe es endlich funktioniert. Ich denke, dass es mich nicht mochte, die Spalte, die ich "Time of Event" genannt hatte, als Eingabe zu bezeichnen. Ich musste die Konvertierung der ganzen Zeit von der SELECT-Anweisung in der WHERE-Anweisung verwenden. Unten ist, was die WHERE-Anweisung und die SELECT-Anweisung waren. SELECT DATEADD (Stunde, DATEDIFF (Stunde, GetUTCDate(), GETDATE()), DATEADD (ZWEITE, aa.fldTimeOfEvent, '1970-01-01 00:00:00')) DATEADD (dd, 0, DATEDIFF (dd, 0, DATEADD (Stunde, DATEDIFF (Stunde, GetUTCDate(), GETDATE()), DATEADD (ZWEITE, aa .fldTimeOfEvent, '1970-01-01 00:00:00')))) = CONVERT (Datum, GETDATE()) – AdamH

0

Ich gehe davon aus, dass Sie SQL Server verwenden. Wenn Sie immer nur müssen die aktuellen Offset, können Sie GETUTCDATE() es verwenden zu berechnen:

SELECT DATEDIFF(hour,GetUTCDate(),GETDATE()) 

Wenn Sie die für andere Tage Offset müssen berechnen möchten Sie wahrscheinlich eine CLR-Funktion verwenden: https://dba.stackexchange.com/questions/28187/how-can-i-get-the-correct-offset-between-utc-and-local-times-for-a-date-that-is

die Links zu: https://blogs.msdn.microsoft.com/sqlserverfaq/2011/07/29/how-to-convert-utc-time-to-local-time-in-sql/