Oracle
 sql >> база данни >  >> RDS >> Oracle

REMAINDER() Функция в Oracle

В Oracle, REMAINDER() функцията връща остатъка от първия си аргумент, разделен на втория.

Това е подобно на MOD() функция, с изключение на това, че използва ROUND() в неговото изчисление, докато MOD() използва FLOOR() в нейното изчисление.

Синтаксис

Синтаксисът е така:

REMAINDER(n2, n1)

Всеки аргумент може да бъде произволен числов тип данни или всеки нечисловен тип данни, който може да бъде имплицитно преобразуван в числов тип данни.

Пример

Ето един пример:

SELECT REMAINDER(100, 6)
FROM DUAL;

Резултат:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() срещу MOD()

Горният резултат може да изглежда неочакван, особено в сравнение с MOD() функция. Но това е така, защото MOD() използва FLOOR() функция във формулата си, докато REMAINDER() използва ROUND() функция.

Ето двете сравнени функции:

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

Резултат:

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

В този случай получаваме значително различни резултати от двете функции, въпреки че и двете връщат остатъка от първия аргумент, разделен на втория.

Какво става?

Може би най-лесният начин да мислите за това е така:

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

Резултат:

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

В този случай получаваме различен резултат, в зависимост от това дали използваме ROUND() или FLOOR() .

  • Ако умножим 17 по 6, получаваме 102. Това ни дава остатък от -2.
  • Ако умножим 16 по 6, получаваме 96. Това ни дава остатъка от 4.

Ако променим 6 до 7 , и двете функции връщат един и същ резултат:

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

Резултат:

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

И ето какво означава ROUND() и FLOOR() връщане:

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

Резултат:

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

Нечислови аргументи

Аргументите могат да бъдат всеки числов тип данни или всеки нечисловен тип данни, които могат да бъдат имплицитно преобразувани в числов тип данни.

Ето пример за това какво се случва, когато аргументите не отговарят на тези критерии:

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

Резултат:

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

Нулеви аргументи

REMAINDER() връща null ако някой аргумент е null :

SET NULL 'null';

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

Резултат:

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

По подразбиране SQLcl и SQL*Plus връщат празно пространство, когато се появи нулева стойност в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Липсващи аргументи

Извикване на REMAINDER() с грешен брой аргументи или без никакви аргументи води до грешка:

SELECT REMAINDER()
FROM DUAL;

Резултат:

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:

И:

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

Резултат:

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. Конфигуриране на репликация на хетерогенна база данни – SQL Server към Oracle

  2. ORA-12170:TNS:Възникна изчакване на връзката

  3. Доставчикът на OraOLEDB.Oracle не е регистриран на локалната машина

  4. Коя е перфектната кутия с инструменти за разработка на PL/SQL?

  5. Как да декларирате потребителско дефинирано изключение с помощта на променлива за изключение в базата данни на Oracle