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

NANVL() Fungsi di Oracle

Di Oracle, NANVL() fungsi memungkinkan kita untuk menangani NaN nilai dengan menentukan nomor lain untuk kembali di tempatnya.

Cara kerjanya adalah, ia menerima dua argumen. Jika argumen pertama adalah NaN (bukan angka), itu mengembalikan argumen kedua. Jika argumen pertama adalah sebuah nomor, maka itu hanya mengembalikan nomor itu.

Perhatikan bahwa fungsi ini hanya berguna untuk bilangan floating-point dengan tipe BINARY_FLOAT atau BINARY_DOUBLE .

Sintaks

Sintaksnya seperti ini:

NANVL(n2, n1)

Setiap argumen dapat berupa tipe data numerik apa pun atau tipe data nonnumerik apa pun yang dapat secara implisit dikonversi ke tipe data numerik.

Contoh

Kami dapat memproduksi NaN dengan membagi nilai float/double nol dengan nol:

SELECT 0f/0 
FROM DUAL;

Hasil:

   0F/0 
_______ 
NaN     

Tetapi jika kita tidak ingin NaN untuk dikembalikan, kita dapat menggunakan NANVL() fungsi untuk mengembalikan nilai yang berbeda:

SELECT NANVL(0f/0, 0) 
FROM DUAL;

Hasil:

   NANVL(0F/0,0) 
________________ 
0.0             

Ini dia lagi, tapi kali ini kita menentukan nilai yang berbeda untuk dikembalikan sebagai ganti NaN :

SELECT NANVL(0f/0, 123) 
FROM DUAL;

Hasil:

   NANVL(0F/0,123) 
__________________ 
123.0              

NaN Floating-Point Literal

Oracle juga menyediakan beberapa literal floating-point untuk situasi yang tidak dapat dinyatakan sebagai literal numerik. Ini termasuk binary_float_nan yang mewakili nilai tipe BINARY_FLOAT yang kondisinya IS NAN benar, dan binary_double_nan , yang mewakili nilai tipe BINARY_DOUBLE yang kondisinya IS NAN benar.

Berikut ini contoh penggunaan literal floating-point ini sebagai gantinya:

SELECT 
    NANVL(binary_double_nan, 0), 
    NANVL(binary_float_nan, 0)
FROM DUAL;

Hasil:

   NANVL(BINARY_DOUBLE_NAN,0)    NANVL(BINARY_FLOAT_NAN,0) 
_____________________________ ____________________________ 
0.0                           0.0                         

Melewati Nomor

Seperti yang disebutkan, jika argumen pertama adalah angka, maka ia mengembalikan angka itu:

SELECT NANVL(33, 0) 
FROM DUAL;

Hasil:

   NANVL(33,0) 
______________ 
            33 

Argumen Non-Numerik

Argumen dapat berupa tipe data numerik apa pun atau tipe data nonnumerik apa pun yang dapat secara implisit dikonversi ke tipe data numerik.

Berikut adalah contoh yang terjadi jika argumen tidak memenuhi kriteria tersebut:

SELECT NANVL('Gosh', 'Dang')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT NANVL('Gosh', 'Dang')
FROM DUAL
Error report -
ORA-01722: invalid number

Argumen Null

NANVL() mengembalikan null jika ada argumen null :

SET NULL 'null';

SELECT 
    NANVL(null, 16),
    NANVL(1024, null),
    NANVL(null, null)
FROM DUAL;

Hasil:

   NANVL(NULL,16)    NANVL(1024,NULL)    NANVL(NULL,NULL) 
_________________ ___________________ ___________________ 
             null                null                null 

Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali nilai null muncul sebagai hasil dari SELECT SQL penyataan.

Namun, Anda dapat menggunakan SET NULL untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null harus dikembalikan.

Argumen Tidak Ada

Memanggil NANVL() tanpa argumen apa pun menghasilkan kesalahan:

SELECT NANVL()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT NANVL()
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:

Dan hal yang sama berlaku ketika memanggilnya dengan terlalu banyak argumen:

SELECT NANVL(10, 2, 3)
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT NANVL(10, 2, 3)
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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. orakel | hapus catatan duplikat

  2. Menggunakan pivot pada beberapa kolom dari baris Oracle

  3. Di Oracle, apakah ada fungsi yang menghitung perbedaan antara dua Tanggal?

  4. di mana saya harus meletakkan sumber daya penginstal (file wxs, skrip dmg, ikon) dan cara mengonfigurasi maven antrun saat menggunakan aplikasi mandiri

  5. Permintaan rekursif di Oracle