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: