Oracle
 sql >> Baza danych >  >> RDS >> Oracle

4 sposoby na zmianę strefy czasowej w Oracle

W Oracle Database strefy czasowe można ustawić w różnych miejscach. Poniżej znajdują się cztery sposoby zmiany strefy czasowej podczas korzystania z Oracle.

Ustaw strefę czasową bazy danych

Strefę czasową bazy danych można ustawić podczas tworzenia bazy danych. Aby to zrobić, użyj SET TIME_ZONE klauzula CREATE DATABASE oświadczenie.

Przykład:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

W tym przypadku użyłem nazwy regionu strefy czasowej. Zobacz Jak zwrócić listę prawidłowych stref czasowych w bazie danych Oracle, aby uzyskać pełną listę prawidłowych nazw regionów w systemie.

Alternatywnie możesz użyć rzeczywistego przesunięcia strefy czasowej:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';

Jeśli nie ustawisz wyraźnie strefy czasowej podczas tworzenia bazy danych, domyślnie jest to strefa czasowa systemu operacyjnego serwera.

Możesz także zmienić bieżące ustawienie strefy czasowej dla bazy danych. Aby to zrobić, użyj ALTER DATABASE oświadczenie.

Przykład:

ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Zwróć uwagę, że strefa czasowa bazy danych dotyczy tylko TIMESTAMP WITH LOCAL TIME ZONE kolumny. Ponadto firma Oracle zaleca ustawienie strefy czasowej bazy danych na UTC (0:00), aby uniknąć konwersji danych i poprawić wydajność podczas przesyłania danych między bazami danych.

Ustaw strefę czasową sesji

Strefę czasową sesji można ustawić niezależnie od strefy czasowej bazy danych. Po zwróceniu TIMESTAMP WITH LOCAL TIME ZONE dane, są zwracane w strefie czasowej bieżącej sesji.

Strefa czasowa sesji działa również, gdy TIMESTAMP wartość jest konwertowana na TIMESTAMP WITH TIME ZONE lub TIMESTAMP WITH LOCAL TIME ZONE typ danych.

Możesz zrobić kilka rzeczy, aby ustawić strefę czasową na poziomie sesji.

Ton ORA_SDTZ Zmienna środowiskowa

Możesz ustawić strefę czasową sesji za pomocą ORA_SDTZ Zmienna środowiskowa. Można to ustawić na następujące wartości:

  • Lokalna strefa czasowa systemu operacyjnego ('OS_TZ' )
  • Strefa czasowa bazy danych ('DB_TZ' )
  • Przesunięcie absolutne względem czasu UTC (np.'-04:00' )
  • Nazwa regionu strefy czasowej (np. 'America/St_Kitts' )

Oto kilka przykładów ustawienia tej zmiennej środowiskowej w środowisku UNIX:

% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'

Domyślna wartość ORA_SDTZ zmienna to 'OD_TZ' . Ta wartość jest używana, gdy zmienna nie jest ustawiona lub jest ustawiona na nieprawidłową wartość.

ALTER SESSION Oświadczenie

Możesz zmienić strefę czasową dla określonej sesji SQL za pomocą SET TIME_ZONE klauzula ALTER SESSION oświadczenie.

TIME_ZONE można ustawić na następujące wartości:

  • Domyślna lokalna strefa czasowa, kiedy sesja została uruchomiona (local )
  • Strefa czasowa bazy danych (dbtimezone )
  • Przesunięcie absolutne względem czasu UTC (np. '-04:00' )
  • Nazwa regionu strefy czasowej (np. 'Canada/Eastern' )

Oto przykład ustawienia TIME_ZONE do takich wartości:

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';

Strefę czasową bieżącej sesji możesz sprawdzić za pomocą SESSIONTIMEZONE funkcja.

Przykład:

SELECT SESSIONTIMEZONE FROM DUAL;

Wynik:

Australia/Brisbane 

W moim przypadku strefa czasowa sesji jest ustawiona na Australia/Brisbane.

Strefa AT TIME ZONE Klauzula

Wyrażenie daty i godziny może zawierać AT LOCAL klauzula lub AT TIME ZONE klauzula. Jeśli dołączysz AT LOCAL klauzula, wynik jest zwracany w strefie czasowej bieżącej sesji. Jeśli uwzględnisz AT TIME ZONE klauzuli, strefa czasowa może być jedną z następujących:

  • Przesunięcie strefy czasowej
  • Nazwa regionu strefy czasowej
  • DBTIMEZONE (ta funkcja zwraca strefę czasową bazy danych)
  • SESSIONTIMEZONE (ta funkcja zwraca strefę czasową bieżącej sesji)
  • Wyrażenie, które zwraca ciąg znaków z prawidłowym formatem strefy czasowej.

Przykład:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT TIME ZONE '+12:00'
FROM DUAL;

Wynik:

02/JAN/30 04:30:35.000000000 AM +12:00

W tym przypadku użyłem FROM_TZ() funkcja do konwersji wartości znacznika czasu i strefy czasowej na TIMESTAMP WITH TIME ZONE wartość. Następnie użyłem AT TIME ZONE klauzula, aby określić inną strefę czasową.

Oto ten sam przykład, ale tym razem określam AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Wynik:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 7 rzeczy, które warto wiedzieć o przedziałach w Oracle Cloud Infrastructure

  2. Twórz pliki PDF za pomocą PLSQL w Oracle

  3. Jaka jest maska ​​formatowania daty Oracle dla stref czasowych?

  4. Zastępowanie tekstu w kolumnie BLOB

  5. Funkcja TRIM() w Oracle