In Oracle Database können Zeitzonen an verschiedenen Stellen eingestellt werden. Im Folgenden finden Sie vier Möglichkeiten zum Ändern der Zeitzone bei Verwendung von Oracle.
Stellen Sie die Zeitzone der Datenbank ein
Sie können die Zeitzone der Datenbank beim Erstellen der Datenbank festlegen. Verwenden Sie dazu den SET TIME_ZONE
-Klausel von CREATE DATABASE
Aussage.
Beispiel:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
In diesem Fall habe ich den Namen einer Zeitzonenregion verwendet. Siehe How to Return a List of Valid Time Zones in Oracle Database, um eine vollständige Liste gültiger Regionsnamen auf Ihrem System zu erhalten.
Alternativ können Sie ein tatsächliches Zeitzonen-Offset verwenden:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';
Wenn Sie die Zeitzone beim Erstellen der Datenbank nicht explizit festlegen, wird standardmäßig die Zeitzone des Betriebssystems des Servers verwendet.
Sie können auch die aktuelle Zeitzoneneinstellung für die Datenbank ändern. Verwenden Sie dazu ALTER DATABASE
Aussage.
Beispiel:
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
Beachten Sie, dass die Zeitzone der Datenbank nur für TIMESTAMP WITH LOCAL TIME ZONE
relevant ist Säulen. Außerdem empfiehlt Oracle, die Zeitzone der Datenbank auf UTC (0:00) einzustellen, um eine Datenkonvertierung zu vermeiden und die Leistung zu verbessern, wenn Daten zwischen Datenbanken übertragen werden.
Legen Sie die Sitzungszeitzone fest
Sie können die Sitzungszeitzone unabhängig von der Datenbankzeitzone festlegen. Wenn Sie TIMESTAMP WITH LOCAL TIME ZONE
zurückgeben Daten werden in der Zeitzone der aktuellen Sitzung zurückgegeben.
Die Sitzungszeitzone wird auch wirksam, wenn ein TIMESTAMP
Der Wert wird in TIMESTAMP WITH TIME ZONE
umgewandelt oder TIMESTAMP WITH LOCAL TIME ZONE
Datentyp.
Sie können einige Dinge tun, um die Zeitzone auf Sitzungsebene festzulegen.
Tder ORA_SDTZ
Umgebungsvariable
Sie können die Sitzungszeitzone mit dem ORA_SDTZ
festlegen Umgebungsvariable. Dies kann auf die folgenden Werte eingestellt werden:
- Lokale Zeitzone des Betriebssystems (
'OS_TZ'
) - Zeitzone der Datenbank (
'DB_TZ'
) - Absoluter Offset von UTC (z. B.
'-04:00'
) - Name der Zeitzonenregion (z. B.
'America/St_Kitts'
)
Hier sind einige Beispiele für das Setzen dieser Umgebungsvariable in einer UNIX-Umgebung:
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'
Der Standardwert von ORA_SDTZ
Variable ist 'OD_TZ'
. Dieser Wert wird verwendet, wenn die Variable nicht gesetzt oder auf einen ungültigen Wert gesetzt ist.
Die ALTER SESSION
Aussage
Sie können die Zeitzone für eine bestimmte SQL-Sitzung mit SET TIME_ZONE
ändern -Klausel der ALTER SESSION
Aussage.
TIME_ZONE
kann auf folgende Werte gesetzt werden:
- Lokale Standardzeitzone beim Start der Sitzung (
local
) - Zeitzone der Datenbank (
dbtimezone
) - Absoluter Offset von UTC (z. B.
'-04:00'
) - Regionsname der Zeitzone (z. B.
'Canada/Eastern'
)
Hier ist ein Beispiel für die Einstellung von TIME_ZONE
zu solchen Werten:
ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';
Sie können die Zeitzone Ihrer aktuellen Sitzung mit SESSIONTIMEZONE
überprüfen Funktion.
Beispiel:
SELECT SESSIONTIMEZONE FROM DUAL;
Ergebnis:
Australia/Brisbane
In meinem Fall ist die Sitzungszeitzone auf Australien/Brisbane eingestellt.
Die AT TIME ZONE
Klausel
Ein datetime-Ausdruck kann ein AT LOCAL
enthalten -Klausel oder ein AT TIME ZONE
Klausel. Wenn Sie einen AT LOCAL
einfügen -Klausel, dann wird das Ergebnis in der Zeitzone der aktuellen Sitzung zurückgegeben. Wenn Sie AT TIME ZONE
angeben -Klausel, dann kann die Zeitzone eine der folgenden sein:
- Eine Zeitzonenverschiebung
- Ein Zeitzonenregionsname
DBTIMEZONE
(Diese Funktion gibt die Zeitzone der Datenbank zurück)SESSIONTIMEZONE
(Diese Funktion gibt die Zeitzone der aktuellen Sitzung zurück)- Ein Ausdruck, der eine Zeichenfolge mit einem gültigen Zeitzonenformat zurückgibt.
Beispiel:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT TIME ZONE '+12:00'
FROM DUAL;
Ergebnis:
02/JAN/30 04:30:35.000000000 AM +12:00
In diesem Fall habe ich den FROM_TZ()
verwendet Funktion zum Konvertieren eines Zeitstempelwerts und einer Zeitzone in einen TIMESTAMP WITH TIME ZONE
Wert. Ich habe dann den AT TIME ZONE
verwendet -Klausel, um eine andere Zeitzone anzugeben.
Hier ist dasselbe Beispiel, außer dass ich dieses Mal AT LOCAL
angebe :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
Ergebnis:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE