Di Oracle Database, zona waktu dapat diatur di berbagai tempat. Berikut adalah empat cara untuk mengubah zona waktu saat menggunakan Oracle.
Setel Zona Waktu Basis Data
Anda dapat mengatur zona waktu database saat membuat database. Untuk melakukannya, gunakan SET TIME_ZONE
klausa dari CREATE DATABASE
pernyataan.
Contoh:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
Dalam hal ini, saya menggunakan nama wilayah zona waktu. Lihat Cara Mengembalikan Daftar Zona Waktu yang Valid di Oracle Database untuk mendapatkan daftar lengkap nama wilayah yang valid di sistem Anda.
Atau, Anda dapat menggunakan offset zona waktu aktual:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';
Jika Anda tidak secara eksplisit menyetel zona waktu saat membuat database, maka zona waktu default sistem operasi server.
Anda juga dapat mengubah pengaturan zona waktu saat ini untuk database. Untuk melakukannya, gunakan ALTER DATABASE
pernyataan.
Contoh:
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
Perhatikan bahwa zona waktu basis data hanya relevan untuk TIMESTAMP WITH LOCAL TIME ZONE
kolom. Selain itu, Oracle menyarankan agar Anda mengatur zona waktu database ke UTC (0:00) untuk menghindari konversi data dan meningkatkan kinerja saat data ditransfer antar database.
Setel Zona Waktu Sesi
Anda dapat mengatur zona waktu sesi secara independen ke zona waktu database. Saat Anda mengembalikan TIMESTAMP WITH LOCAL TIME ZONE
data, itu dikembalikan dalam zona waktu sesi saat ini.
Zona waktu sesi juga berlaku saat TIMESTAMP
nilai dikonversi ke TIMESTAMP WITH TIME ZONE
atau TIMESTAMP WITH LOCAL TIME ZONE
tipe data.
Anda dapat melakukan beberapa hal untuk menyetel zona waktu pada tingkat sesi.
Tdia ORA_SDTZ
Variabel Lingkungan
Anda dapat mengatur zona waktu sesi dengan ORA_SDTZ
variabel lingkungan. Ini dapat diatur ke nilai berikut:
- Zona waktu lokal sistem operasi (
'OS_TZ'
) - Zona waktu basis data (
'DB_TZ'
) - Offset mutlak dari UTC (mis.
'-04:00'
) - Nama wilayah zona waktu (mis.
'America/St_Kitts'
)
Berikut adalah beberapa contoh pengaturan variabel lingkungan ini di lingkungan UNIX:
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'
Nilai default ORA_SDTZ
variabelnya adalah 'OD_TZ'
. Nilai ini digunakan ketika variabel tidak disetel atau disetel ke nilai yang tidak valid.
ALTER SESSION
Pernyataan
Anda dapat mengubah zona waktu untuk sesi SQL tertentu dengan SET TIME_ZONE
klausa dari ALTER SESSION
pernyataan.
TIME_ZONE
dapat diatur ke nilai berikut:
- Zona waktu lokal default saat sesi dimulai (
local
) - Zona waktu basis data (
dbtimezone
) - Offset mutlak dari UTC (mis.
'-04:00'
) - Nama wilayah zona waktu (mis.
'Canada/Eastern'
)
Berikut contoh pengaturan TIME_ZONE
ke nilai-nilai seperti itu:
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';
Anda dapat memeriksa zona waktu sesi Anda saat ini dengan SESSIONTIMEZONE
fungsi.
Contoh:
SELECT SESSIONTIMEZONE FROM DUAL;
Hasil:
Australia/Brisbane
Dalam kasus saya, zona waktu sesi diatur ke Australia/Brisbane.
AT TIME ZONE
Klausa
Ekspresi datetime dapat menyertakan AT LOCAL
klausa atau AT TIME ZONE
ayat. Jika Anda menyertakan AT LOCAL
klausa, maka hasilnya dikembalikan dalam zona waktu sesi saat ini. Jika Anda menyertakan AT TIME ZONE
klausa, maka zona waktu dapat berupa salah satu dari berikut ini:
- Offset zona waktu
- Nama wilayah zona waktu
DBTIMEZONE
(fungsi ini mengembalikan zona waktu database)SESSIONTIMEZONE
(fungsi ini mengembalikan zona waktu sesi saat ini)- Ekspresi yang mengembalikan string karakter dengan format zona waktu yang valid.
Contoh:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT TIME ZONE '+12:00'
FROM DUAL;
Hasil:
02/JAN/30 04:30:35.000000000 AM +12:00
Dalam hal ini saya menggunakan FROM_TZ()
berfungsi untuk mengonversi nilai stempel waktu dan zona waktu menjadi TIMESTAMP WITH TIME ZONE
nilai. Saya kemudian menggunakan AT TIME ZONE
klausa untuk menentukan zona waktu yang berbeda.
Ini contoh yang sama, kecuali kali ini saya tentukan AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
Hasil:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE