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

Mengapa DECODE Oracle memberi saya nilai yang berbeda dari NVL?

Itu karena parameter 3 dari pernyataan decode Anda adalah NULL; sesuai dokumentasi (penekanan saya).

Oracle secara otomatis mengonversi expr dan setiap nilai pencarian ke tipe data dari nilai pencarian pertama sebelum membandingkan .... Jika hasil pertama memiliki tipe data CHAR atau jika hasil pertama adalah null, maka Oracle mengonversi nilai yang dikembalikan ke tipe data VARCHAR2 .

Dalam kasus Anda, hasil pertama adalah NULL, yang diperlakukan Oracle sebagai VARCHAR2. Nilai pengembalian Anda secara implisit dikonversi ke VARCHAR2. Jika Anda mengubah DECODE() ke berikut ini Anda akan mendapatkan nomor:

select decode(1, 0, 0, 0.75)

dan Anda dapat mencapai NULL Anda dengan menggunakan NULLIF() fungsi:

select nullif(decode(1, 0, 0, 0.75), 0) ...

Lebih baik menggunakan pernyataan CASE, yang memaksa bahwa semua tipe data yang dikembalikan adalah sama:

select case 1 when 0 then null
              else 0.75
       end ...

1. yang juga membuat saya ketahuan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Langkah-langkah untuk mengubah Kata Sandi Admin yang hilang atau terlupakan dari EBS WebLogic Domain R12.2

  2. GROUP BY / kebingungan fungsi agregat dalam SQL

  3. Bagaimana cara mendapatkan id sisipan terakhir di Oracle menggunakan MyBatis?

  4. Contoh kueri MySQL dengan jawaban

  5. Oracle DB:Bagaimana saya bisa menulis kasus pengabaian kueri?