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

Функция ROUND(число) в Oracle

В Oracle, ROUND(number) функцията връща число, закръглено до определен брой десетични знака.

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

Oracle също има ROUND(date) синтаксис, който се използва за дати. Тази статия е само за ROUND(number) синтаксис, който се използва за числа.

Синтаксис

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

ROUND(n [, integer ])

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

Пример

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

SELECT ROUND(7.85)
FROM DUAL;

Резултат:

   ROUND(7.85) 
______________ 
             8 

Отрицателна стойност

Превключването му на отрицателна стойност води до следния резултат:

SELECT ROUND(-7.85)
FROM DUAL;

Резултат:

   ROUND(-7.85) 
_______________ 
             -8

Втори аргумент

Ето пример за предоставяне на втори аргумент:

SELECT ROUND(7.85, 1)
FROM DUAL;

Резултат:

   ROUND(7.85,1) 
________________ 
             7.9

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

Ето още един пример с по-голям брой десетични знаци:

SELECT ROUND(3.14159265359, 4)
FROM DUAL;

Резултат:

   ROUND(3.14159265359,4) 
_________________________ 
                   3.1416

Отрицателно закръгляване

Можете също да посочите отрицателна стойност за втория аргумент. По този начин числото се закръглява вляво от десетичната запетая:

SELECT ROUND(75631, -3)
FROM DUAL;

Резултат:

   ROUND(75631,-3) 
__________________ 
             76000

Закръгляване на нечислови аргументи

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

SELECT ROUND('Bruce')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT ROUND('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

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

Нулеви стойности

Опитвам се да закръгля null връща null и се опитва да закръгли число с null също води до null :

SET NULL 'null';

SELECT 
    ROUND(null),
    ROUND(null, 2),    
    ROUND(2.345, null)
FROM DUAL;

Резултат:

   ROUND(NULL)    ROUND(NULL,2)    ROUND(2.345,NULL) 
______________ ________________ ____________________ 
          null             null                 null 

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

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

Неправилен брой аргументи

Извикване на ROUND() без подаване на аргументи връща грешка:

SELECT ROUND()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT ROUND()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

И предаването на грешен брой аргументи води до грешка:

SELECT ROUND(1.34, 2, 3)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT ROUND(1.34, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 23
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*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. В Oracle има ли функция, която изчислява разликата между две дати?

  2. Как да използвам PBKDF2 в Oracle 12c?

  3. Възможно ли е да се стартира SQLPLUS скрипт върху файл, кодиран като UTF-8 със спецификация

  4. Как да промените символа на валутата на вашата сесия в Oracle

  5. Unitils и DBMaintainer - как да ги накарам да работят с множество потребители/схеми?