Baza Danych.Przewodnik
w bazie danych Oracle strefy czasowe można ustawić w różnych miejscach. Poniżej przedstawiono cztery sposoby zmiany strefy czasowej podczas korzystania z Oracle.
Ustaw strefę czasową bazy danych
możesz ustawić strefę czasową bazy danych podczas tworzenia bazy danych. Aby to zrobić, użyj klauzuli SET TIME_ZONE
w instrukcji CREATE DATABASE
.
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ę ważnych 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 podczas tworzenia bazy danych nie zostanie wyraźnie ustawiona Strefa czasowa, domyślnie jest to strefa czasowa systemu operacyjnego serwera.
Możesz również zmienić ustawienie bieżącej strefy czasowej dla bazy danych. Aby to zrobić, użyj polecenia ALTER DATABASE
.
przykład:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
należy pamiętać, że strefa czasowa bazy danych jest odpowiednia tylko dla kolumn TIMESTAMP WITH LOCAL TIME ZONE
. Ponadto 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
możesz ustawić strefę czasową sesji niezależnie od strefy czasowej bazy danych. Po zwróceniu danych TIMESTAMP WITH LOCAL TIME ZONE
są one zwracane w strefie czasowej bieżącej sesji.
Strefa czasowa sesji działa również, gdy wartość TIMESTAMP
jest konwertowana na typ danych TIMESTAMP WITH TIME ZONE
lub TIMESTAMP WITH LOCAL TIME ZONE
.
możesz zrobić kilka rzeczy, aby ustawić strefę czasową na poziomie sesji.
zmienna środowiskowa ORA_SDTZ
możesz ustawić strefę czasową sesji za pomocą zmiennej środowiskowej ORA_SDTZ
. Można to ustawić na następujące wartości:
- system operacyjny lokalna Strefa czasowa(
'OS_TZ'
) - Strefa czasowa bazy danych (
'DB_TZ'
) - bezwzględne przesunięcie od UTC (np.
'-04:00'
) - Nazwa Regionu strefy czasowej (np.
'America/St_Kitts'
)
oto kilka przykładów ustawiania tej zmiennej środowiskowej w środowisku uniksowym:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
domyślną wartością zmiennej ORA_SDTZ
jest 'OD_TZ'
. Wartość ta jest używana, gdy zmienna nie jest ustawiona lub jest ustawiona na nieprawidłową wartość.
instrukcja ALTER SESSION
możesz zmienić strefę czasową dla określonej sesji SQL za pomocą klauzuli SET TIME_ZONE
instrukcji ALTER SESSION
.
TIME_ZONE
można ustawić na następujące wartości:
- domyślna lokalna Strefa czasowa po rozpoczęciu sesji(
local
) - Strefa czasowa bazy danych (
dbtimezone
) - bezwzględne przesunięcie od UTC (np.
'-04:00'
) - Nazwa Regionu strefy czasowej (np.
'Canada/Eastern'
)
oto przykład ustawienia TIME_ZONE
na takie 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';
możesz sprawdzić strefę czasową bieżącej sesji za pomocą funkcji SESSIONTIMEZONE
.
przykład:
SELECT SESSIONTIMEZONE FROM DUAL;
wyniki:
Australia/Brisbane
w moim przypadku Strefa czasowa sesji jest ustawiona na Australia / Brisbane.
Klauzula strefy czasowej AT
wyrażenie datetime może zawierać klauzulę AT LOCAL
lub klauzulę AT TIME ZONE
. Jeśli zastosujesz klauzulę AT LOCAL
, wynik zostanie zwrócony w bieżącej strefie czasowej sesji. Jeśli dołączysz klauzulę AT TIME ZONE
, Strefa czasowa może być jedną z następujących:
- przesunięcie strefy czasowej
- Nazwa Regionu strefy czasowej
-
DBTIMEZONE
(funkcja zwraca strefę czasową bazy danych) -
SESSIONTIMEZONE
(funkcja ta zwraca strefę czasową bieżącej sesji) - wyrażenie, które zwraca łańcuch 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;
wyniki:
02/JAN/30 04:30:35.000000000 AM +12:00
w tym przypadku użyłem funkcji FROM_TZ()
do konwersji wartości znacznika czasu i strefy czasowej na wartość TIMESTAMP WITH TIME ZONE
. Następnie użyłem klauzuli AT TIME ZONE
, aby określić inną strefę czasową.
oto ten sam przykład, tyle że tym razem podaję AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
wynik:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE