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

REMAINDER() Fungsi di Oracle

Di Oracle, REMAINDER() fungsi mengembalikan sisa argumen pertama dibagi dengan yang kedua.

Ini mirip dengan MOD() fungsi, kecuali yang menggunakan ROUND() dalam perhitungannya, sedangkan MOD() menggunakan FLOOR() dalam perhitungannya.

Sintaks

Sintaksnya seperti ini:

REMAINDER(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

Ini contohnya:

SELECT REMAINDER(100, 6)
FROM DUAL;

Hasil:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() vs MOD()

Hasil di atas mungkin tampak tidak terduga, terutama jika dibandingkan dengan MOD() fungsi. Tapi ini karena MOD() menggunakan FLOOR() fungsi dalam rumusnya, sedangkan REMAINDER() menggunakan ROUND() fungsi.

Berikut adalah dua fungsi yang dibandingkan:

SELECT 
    REMAINDER(100, 6),
    MOD(100, 6)
FROM DUAL;

Hasil:

   REMAINDER(100,6)    MOD(100,6) 
___________________ _____________ 
                 -2             4

Dalam kasus ini, kita mendapatkan hasil yang sangat berbeda dari kedua fungsi tersebut, meskipun keduanya mengembalikan sisa dari argumen pertama dibagi dengan yang kedua.

Ada apa?

Mungkin cara termudah untuk memikirkannya adalah seperti ini:

SELECT 
    100/6,
    ROUND(100/6) AS "ROUND()",
    FLOOR(100/6) AS "FLOOR()"
FROM DUAL;

Hasil:

     100/6    ROUND()    FLOOR()
---------- ---------- ----------
16.6666667         17         16

Dalam hal ini kita mendapatkan hasil yang berbeda, tergantung apakah kita menggunakan ROUND() atau FLOOR() .

  • Jika kita mengalikan 17 dengan 6, kita mendapatkan 102. Ini memberi kita sisa -2.
  • Jika kita mengalikan 16 dengan 6, kita mendapatkan 96. Ini memberi kita sisa 4.

Jika kita mengubah 6 ke 7 , kedua fungsi mengembalikan hasil yang sama:

SELECT 
    REMAINDER(100, 7),
    MOD(100, 7)
FROM DUAL;

Hasil:

   REMAINDER(100,7)    MOD(100,7) 
___________________ _____________ 
                  2             2 

Dan inilah yang ROUND() dan FLOOR() kembali:

SELECT 
    100/7,
    ROUND(100/7) AS "ROUND()",
    FLOOR(100/7) AS "FLOOR()"
FROM DUAL;

Hasil:

     100/7    ROUND()    FLOOR()
---------- ---------- ----------
14.2857143         14         14

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 REMAINDER('Ponzi', 'Invest')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL
Error report -
ORA-01722: invalid number

Argumen Null

REMAINDER() mengembalikan null jika ada argumen null :

SET NULL 'null';

SELECT 
    REMAINDER(null, 2),
    REMAINDER(7, null),
    REMAINDER(null, null)
FROM DUAL;

Hasil:

   REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(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 REMAINDER() dengan jumlah argumen yang salah, atau tanpa argumen apa pun menghasilkan kesalahan:

SELECT REMAINDER()
FROM DUAL;

Hasil:

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

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

Hasil:

Error starting at line : 1 in command -
SELECT REMAINDER(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. Apa yang dilakukan (+) di Oracle SQL?

  2. Kembalikan Nama Hari Pendek dari Tanggal di Oracle

  3. ORA-01017 Tips Resolusi Kesalahan Oracle

  4. Perubahan Oracle Ace

  5. Bagaimana cara menguji Prosedur Tersimpan Oracle dengan tipe pengembalian RefCursor?