Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

CAST() Fungsi di Oracle

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara Fungsi Tabel dan Fungsi Pipeline?

  2. Kembali dari Open World 2013

  3. Metadata mengenai tipe record level paket PL/SQL

  4. Kueri WHERE_IN dengan kunci komposit?

  5. Petualangan Pembelian Ringan