Meine Anforderung hier ist, Zeit in GMT/UTC von einer Datumsart Spalte zu bekommen. Aber wenn ich Cast verwende, um das Datum auf den Zeitstempel zu setzen, verwendet es die Zeitzone USA/Pazifik als Referenz, obwohl die Zeitzone der Sitzung auf GMT eingestellt ist. Wenn ich also nicht from__tz benutze, sehe ich kein gewünschtes Ergebnis. Gibt es eine andere Zeitzone in Oracle SQL, die ich ändern muss, um GMT immer als Referenz zu verwenden?Oracle sql Zeitzone Problem
alter session set time_zone='+00:00';
select sessiontimezone from dual;
select current_timestamp from dual;
select sys_extract_utc(cast (sysdate as timestamp)) from dual;
select sys_extract_utc(from_tz(cast (sysdate as timestamp), '-07:00')) from dual;
select sys_extract_utc(current_timestamp) from dual;
Session altered.
SESSIONTIMEZONE
---------------------------------------------------------------------------
+00:00
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
11-APR-16 08.46.42.292173 AM +00:00
SYS_EXTRACT_UTC(CAST(SYSDATEASTIMESTAMP))
---------------------------------------------------------------------------
11-APR-16 01.46.42.000000 AM
SYS_EXTRACT_UTC(FROM_TZ(CAST(SYSDATEASTIMESTAMP),'-07:00'))
---------------------------------------------------------------------------
11-APR-16 08.46.42.000000 AM
SYS_EXTRACT_UTC(CURRENT_TIMESTAMP)
---------------------------------------------------------------------------
11-APR-16 08.46.42.295310 AM
Die Tabelle der Aufgaben enthält eine Datumsspalte namens task_started. Ich suche nach UTC-Zeit von diesem Datumsfeld. Als Teil davon habe ich versucht, die Zeitzone der Sitzung in GMT zu ändern, während ich die Daten einfüge, so dass ich sie einfach in den Zeitstempel zurückwerfen kann, der nicht funktioniert.
select task_started from tasks where rownum <2;
TASK_STAR
---------
10-APR-16
desc tasks;
Name Null? Type
----------------------------------------- -------- ----------------------------
...
TASK_STARTED DATE
...
Können Sie ein Beispiel für ein gespeichertes Datum (mit Zeitangabe) und die erwartete Ausgabe angeben? In welcher Zeitzone steht das Datum/die Uhrzeit in dieser Spalte, und woher weißt du das? Gibt es eine weitere Spalte, in der die Zeitzone gespeichert ist, oder ist anzunehmen, dass eine Konvertierung erforderlich ist? –
@AlexPoole In meiner Tabelle ist nur das Datum gespeichert, daher werfe ich das auf den Zeitstempel zurück. Ich gehe davon aus, dass das Datum/die Uhrzeit, die in der Tabelle gespeichert werden, die Zeitzone der Sitzung verwenden sollte, die GMT ist, da ich die Zeitzone der Sitzung geändert habe. Da die Cast-Funktion die Zeit in den USA/Pazifik zurückgibt, bin ich verwirrt. –
Eine Datumsspalte hat keine Zeitzone (hat aber immer eine Zeit, selbst wenn Ihre Abfrage/Ihr Client dies nicht anzeigt). Wenn Sie als einfacher Zeitstempel casten, bleibt die Zeit gleich, aber es werden immer noch keine Zeitzoneninformationen angezeigt.Bei Ihrer Frage geht es darum, das Datum/die Uhrzeit in UTC zu konvertieren, was bedeutet, dass es in einer bestimmten Zone gespeichert oder bereitgestellt wird. Z.B. Wenn das Datum ursprünglich mithilfe von sysdate eingefügt wurde, was die Serverzeitzone impliziert, und Sie möchten, dass das UTC dem entspricht. Bitte fügen Sie Daten und Ausgaben hinzu, da nicht klar ist, was Sie wirklich benötigen. –