2014-04-08 8 views
5

ich verwenden, um diesen Teil einer Abfrage wird eine Zeile eine Tabellenspalte für Datum und Zeit zu schaffen: bei etwasWie füge ich 1 Stunde zu datetime SQL-Spaltendaten hinzu?

order_date datetime NOT NULL DEFAULT GETDATE()

und wann immer eine neue Zeile erstellt wird, wird die Daten für order_date wie eingestellt Dieser:

Apr 8 2014 9:52AM

Aus irgendeinem Grund, wenn eine Zeile angelegt wird, und die order_date Spaltendaten festgelegt ist, wird die Stunde 1 Stunde zurück gesetzt. Zum Beispiel wurden die obigen Spaltendaten für Apr 8 2014 9:52AM auf 10:52 Uhr gesetzt.

Gibt es eine Möglichkeit, es 1 Stunde voraus zu setzen, damit es mit meiner aktuellen Zeit übereinstimmt?

Vielen Dank für jede Hilfe. Alle Hilfe wird sehr geschätzt.

+3

Überprüfen Sie die Systemzeit auf dem SQL-Server. Behebe das, nicht das Symptom. – MatBailie

+0

Die Zeitzone des Servers ist möglicherweise deaktiviert. –

+0

kann ich nicht, weil es nicht mein Server ist, daher kann ich die Zeitzone nicht ändern. – Kelsey

Antwort

4

Sie sollten DATETIMEOFFSET als Ihren Datentyp anstelle von DATETIME verwenden.

Definiert ein Datum, das mit einer Zeit von einem Tag kombiniert wird, die Zeit Zone Bewusstsein hat und auf einer 24-Stunden-Uhr basiert.

Sie können es mit SYSDATETIMEOFFSET( verwenden).

Returns a datetimeoffset(7) value that contains the date and time of the computer on which the instance of SQL Server is running. The time zone offset is included. 

Beispiel:

CREATE TABLE DateTest (id INT, order_date DATETIMEOFFSET NOT NULL DEFAULT SYSDATETIMEOFFSET()) 
INSERT INTO DateTest (id) VALUES (1) 
SELECT * FROM DateTest 
+0

Ich benutze 'date_default_timezone_set ('America/Edmonton');' auf meiner PHP-Seite, also hoffe ich, dass es das Datum/die Zeit darauf setzt. Wie würde ich eine Abfrage erstellen, um eine Tabellenspalte für diesen Datentyp zu erstellen? – Kelsey

+0

SQL Server DATETIME enthält keine Zeitzoneninformationen, sodass PHP ohne weitere Informationen nichts damit anfangen kann. Ich brauche vielleicht nicht Zeit, um die Abfrage hinzuzufügen, aber es ist im Grunde das Gleiche, nur mit dem anderen Typ und der anderen Funktion. –

+0

Sehr gute Antwort, hier ist eine Abstimmung oben. Ich würde mich freuen, wenn möglich, über meine Frage abzustimmen. – Kelsey

14

Verwenden DATEADD()

DATEADD(hh, 1, order_date) 

EDIT:

Wenn die Zeit wieder eine Stunde eingestellt wird, können Sie eine falsche Systemzeit haben. Also, es wäre besser, wenn Sie nur Server-Administrator bitten, es zu korrigieren.

+0

Wie würde ich das in einer Abfrage verwenden? (DATEADD (hh, 1, order_date)) – Kelsey

+0

INSERT INTO Tabellenname VALUES (DATEADD (hh, 1, order_date)). Sie liefern den Rest der Spalten. – Nath

+0

Dies ist, was ich gerade benutze und es scheint keine neuen Zeilen einzufügen: '$ sql5 =" INSERT INTO tracking_orders (account_id, order_date) WERTE ('". $ Acc_id."', 'DATEADD (hh , 1, order_date) ') "' – Kelsey