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.