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

Memahami perilaku fungsi sisa () di Oracle

Orang-orang yang menulis dokumentasi (yang tampaknya tidak mengingat beberapa definisi dari aritmatika) sendiri tampaknya tidak yakin dengan apa yang mereka tulis. Di satu sisi, di awal penjelasan mereka menyebutkan ROUND - namun kemudian ketika mereka memberikan definisi yang lebih formal, mereka mengatakan

"Bilangan bulat terdekat" tidak didefinisikan secara formal dalam aritmatika, dan memang seseorang diizinkan untuk menggunakan nama itu untuk putaran(x) kecuali jika bagian pecahan dari x tepat 0,5, dalam hal ini "bilangan bulat terdekat" adalah ambigu dan seseorang dapat memilih untuk gunakan "bulatkan ke bawah" sebagai definisi mereka sendiri tentang "bilangan bulat terdekat."

Jangan terlalu kesal dengan inkonsistensi seperti itu dalam dokumentasi, jika Anda bisa. Anda akan melihat lebih banyak lagi.

Namun :Yang JAUH lebih buruk adalah bahwa perilakunya tidak konsisten. Saya menggunakan Oracle 12.1, dan di mesin saya, saya baru saja mencoba dan saya mendapatkan

remainder(10, 4) =  2
remainder( 6, 4) = -2

Tidak ada sajak atau alasan. Jauh lebih baik untuk melakukan pembagian sendiri, menggunakan LANTAI dan semacamnya.

Sunting - Atau mungkin ada beberapa alasan; mungkin mereka menggunakan definisi "bilangan bulat terdekat" yang berarti, dalam kasus seri, genap terdekat bilangan bulat. Masih menghasilkan hasil yang tidak terduga, sebaiknya tidak menggunakan fungsi REMAINDER() Oracle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan nilai berdasarkan maksimal kolom berbeda yang dikelompokkan berdasarkan kolom lain

  2. Cara mendapatkan data mingguan di Oracle

  3. Jatuhkan batasan dengan karakter khusus di Oracle

  4. PHP:oci_bind_by_name dan bidang stempel waktu menghasilkan ORA-01461:dapat mengikat nilai PANJANG hanya untuk dimasukkan ke dalam kolom PANJANG

  5. Cara membuat MERGE bisa serial