Oracle
 sql >> Datenbank >  >> RDS >> Oracle

4 Möglichkeiten zum Ändern der Zeitzone in Oracle

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