Oracle
 sql >> Baza danych >  >> RDS >> Oracle

REMAINDER() Funkcja w Oracle

W Oracle REMAINDER() funkcja zwraca resztę pierwszego argumentu podzieloną przez drugi.

Jest podobny do MOD() funkcja, z wyjątkiem tego, że używa ROUND() w jego obliczeniach, podczas gdy MOD() używa FLOOR() w jego obliczeniach.

Składnia

Składnia wygląda tak:

REMAINDER(n2, n1)

Każdy argument może być dowolnym liczbowym typem danych lub dowolnym nienumerycznym typem danych, który można niejawnie przekonwertować na numeryczny typ danych.

Przykład

Oto przykład:

SELECT REMAINDER(100, 6)
FROM DUAL;

Wynik:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() vs MOD()

Powyższy wynik może wydawać się nieoczekiwany, szczególnie w porównaniu z MOD() funkcjonować. Ale to dlatego, że MOD() używa FLOOR() funkcji w swojej formule, podczas gdy REMAINDER() używa ROUND() funkcjonować.

Oto dwie porównywane funkcje:

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

Wynik:

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

W tym przypadku obie funkcje uzyskują bardzo różne wyniki, mimo że obie zwracają pozostałą część pierwszego argumentu podzieloną przez drugi.

Co się dzieje?

Być może najłatwiej o tym pomyśleć:

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

Wynik:

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

W tym przypadku otrzymujemy inny wynik, w zależności od tego, czy używamy ROUND() lub FLOOR() .

  • Jeśli pomnożymy 17 przez 6, otrzymamy 102. To daje nam resztę -2.
  • Jeśli pomnożymy 16 przez 6, otrzymamy 96. To daje nam resztę z 4.

Jeśli zmienimy 6 do 7 , obie funkcje zwracają ten sam wynik:

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

Wynik:

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

A oto, co ROUND() i FLOOR() powrót:

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

Wynik:

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

Argumenty nieliczbowe

Argumentami może być dowolny numeryczny typ danych lub dowolny nienumeryczny typ danych, który można niejawnie przekonwertować na numeryczny typ danych.

Oto przykład tego, co się dzieje, gdy argumenty nie spełniają tych kryteriów:

SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL;

Wynik:

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

Argumenty zerowe

REMAINDER() zwraca null jeśli jakikolwiek argument jest null :

SET NULL 'null';

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

Wynik:

   REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(NULL,NULL) 
____________________ ____________________ _______________________ 
                null                 null                    null

Domyślnie SQLcl i SQL*Plus zwracają spację za każdym razem, gdy w wyniku polecenia SQL SELECT wystąpi wartość null oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.

Brakujące argumenty

Wywołanie REMAINDER() z niewłaściwą liczbą argumentów lub bez żadnych argumentów powoduje błąd:

SELECT REMAINDER()
FROM DUAL;

Wynik:

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:

Oraz:

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

Wynik:

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. Rekurencja w Oracle

  2. Zwraca wartość ze skryptu sql do skryptu powłoki

  3. Najlepszy sposób na okresowe uruchamianie zapytań Oracle

  4. Błąd ORA-00932 podczas używania wyboru z polami Union i CLOB

  5. Jak wyświetlić listę wszystkich tabel w schemacie w Oracle SQL?