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: