Di Oracle Database, FROM_TZ()
fungsi mengonversi nilai stempel waktu dan zona waktu menjadi TIMESTAMP WITH TIME ZONE
nilai.
Anda meneruskan nilai stempel waktu dan zona waktu sebagai dua argumen terpisah, dan fungsi mengembalikannya sebagai TIMESTAMP WITH TIME ZONE
nilai.
Sintaks
Sintaksnya seperti ini:
FROM_TZ(timestamp_value, time_zone_value)
Dimana timestamp_value
adalah stempel waktu, dan time_zone_value
adalah string karakter dalam format 'TZH:TZM'
atau ekspresi karakter yang mengembalikan string dalam TZR
dengan TZD
opsional formatnya.
Contoh
Ini contohnya:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Hasil:
01/JAN/30 12:30:35.000000000 PM -04:00
Menentukan Wilayah Zona Waktu
Berikut adalah contoh yang menggunakan wilayah zona waktu alih-alih offset zona waktu:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Hasil:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Ubah Zona Waktu
Anda dapat menggunakan AT LOCAL
atau AT TIME ZONE
klausa untuk mengubah stempel waktu yang dihasilkan ke zona waktu yang berbeda.
Contoh:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Hasil:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Dan ini dia menggunakan AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Hasil:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Anda dapat menggunakan SESSIONTIMEZONE
berfungsi untuk memeriksa zona waktu sesi saat ini, dan DBTIMEZONE
untuk memeriksa zona waktu database.
Zona Waktu Tidak Valid
Melewati zona waktu yang tidak valid menghasilkan kesalahan:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover') FROM DUAL Error report - ORA-01882: timezone region not found
Anda bisa mendapatkan daftar wilayah zona waktu yang valid dengan menanyakan V$TIMEZONE_NAMES
lihat.
Inilah yang terjadi jika kami memberikan offset zona waktu yang berada di luar rentang yang diterima:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00') FROM DUAL Error report - ORA-01874: time zone hour must be between -15 and 15
Argumen Null
Melewati null
untuk argumen pertama menghasilkan kesalahan:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT FROM_TZ(null, '+10:00') FROM DUAL Error at Command Line : 2 Column : 13 Error report - SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause: *Action:
Melewati null
untuk argumen kedua mengembalikan null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Hasil:
null
Perhatikan bahwa secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Pada contoh di atas, saya menetapkan bahwa string null
harus dikembalikan.
Jumlah Argumen Tidak Valid
Melewati sejumlah argumen yang tidak valid menghasilkan kesalahan:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: