Di Oracle Database, CAST()
fungsi mengubah argumennya menjadi tipe data yang berbeda.
Lebih khusus lagi, ini memungkinkan Anda mengonversi tipe data bawaan atau nilai tipe koleksi dari satu jenis menjadi tipe data atau tipe koleksi bawaan lainnya.
Sintaks
Sintaksnya seperti ini:
CAST({ expr | MULTISET (subquery) } AS type_name
[ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
Contoh
Berikut ini contoh untuk didemonstrasikan:
SELECT CAST('10-AUG-30' AS TIMESTAMP)
FROM DUAL;
Hasil:
10-AUG-30 12.00.00.000000000 AM
Berikan Nilai Default pada Kesalahan Konversi
Anda dapat menggunakan DEFAULT return_value ON CONVERSION ERROR
argumen untuk menentukan apa yang harus dikembalikan jika terjadi kesalahan saat mengonversi nilai.
Contoh:
SELECT CAST(
'Homer' AS NUMBER
DEFAULT '0' ON CONVERSION ERROR
)
FROM DUAL;
Hasil:
0
Inilah yang terjadi ketika kami menghapus DEFAULT return_value ON CONVERSION ERROR
argumen:
SELECT CAST(
'Homer' AS NUMBER
)
FROM DUAL;
Hasil:
ORA-01722: invalid number
Tentukan Format – fmt
Argumen
Dalam contoh ini saya menggunakan fmt
argumen untuk menentukan format tanggal dalam argumen pertama:
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP,
'Day, DD Month YYYY'
)
FROM DUAL;
Hasil:
03-SEP-21 12.00.00.000000000 AM
Bila Anda Menghilangkan Format
Mengabaikan format dapat mengakibatkan kesalahan, tergantung pada apakah argumen pertama sesuai dengan pemformatan default sesi untuk tipe data yang dihasilkan.
Inilah yang terjadi ketika saya mengabaikan argumen format:
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP
)
FROM DUAL;
Hasil:
Error report - ORA-01858: a non-numeric character was found where a numeric was expected
Dalam hal ini, saya mencoba mengonversi string menjadi TIMESTAMP
nilai, tetapi string tidak menyerupai TIMESTAMP
nilai berdasarkan NLS_TIMESTAMP_FORMAT
sesi saya parameter, dan terjadi kesalahan.
Berikut format yang digunakan sesi saya saat ini untuk TIMESTAMP
nilai:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
Hasil:
DD-MON-RR HH.MI.SSXFF AM
Mari kita ubah itu:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'fmDay, DD Month YYYY HH.MI.SSXFF AM';
Hasil:
Session altered.
Dan sekarang mari kita jalankan kembali konversi sebelumnya:
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP
)
FROM DUAL;
Hasil:
Friday, 3 September 2021 12.0.0.000000000 AM
Kali ini tidak ada kesalahan.
Perhatikan bahwa, meskipun saya secara eksplisit mengubah NLS_TIMESTAMP_FORMAT
parameter di sini, biasanya lebih baik untuk mengubah NLS_TERRITORY
parameter sebagai gantinya. Mengubah NLS_TERRITORY
parameter secara implisit mengubah parameter NLS lainnya, seperti format tanggal, simbol mata uang, dll.
Bagaimanapun, seperti yang ditunjukkan di atas, alih-alih mengubah parameter NLS apa pun, Anda dapat menggunakan fmt
argumen saat memanggil fungsi.
nlsparam
Argumen
Anda dapat menggunakan nlsparam
opsional argumen untuk menentukan parameter NLS dari dalam fungsi.
Contoh:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
ALTER SESSION SET NLS_DATE_FORMAT = 'fmDay, DD Month YYYY';
SELECT
CAST(
'sábado, 10 agosto 30' AS DATE,
'Day, DD Month RR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Hasil:
Saturday, 10 August 2030
Dalam hal ini, saya mulai dengan mengatur beberapa parameter NLS sesi saya. Kemudian ketika saya memanggil CAST()
, saya meneruskan string dalam bahasa Spanyol, lalu menggunakan nlsparam
argumen untuk menentukan ini.
Jadi, hasilnya ditampilkan menggunakan parameter NLS sesi saya, tetapi nilai sebenarnya yang saya berikan adalah dalam bahasa Spanyol.
Info Lebih Lanjut
Ada banyak hal yang harus diperhatikan saat mengonversi antar tipe data. Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang menggunakan CAST()
fungsi.