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

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

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

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

Синтаксис

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

TRUNC(n1 [, n2 ])

Където n1 е стойността за съкращаване и n2 е незадължителен аргумент, който указва колко десетични знака да се съкрати n1 да се. Ако n2 е пропуснато, след което n1 се съкращава до нула знака след десетичната запетая.

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

Пример

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

SELECT TRUNC(3.95)
FROM DUAL;

Резултат:

   TRUNC(3.95) 
______________ 
             3

Посочете десетичен знак

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

SELECT TRUNC(1.25817, 2)
FROM DUAL;

Резултат:

   TRUNC(1.25817,2) 
___________________ 
               1.25

Ето още няколко:

SELECT 
    TRUNC(1.25817, 1) AS "1",
    TRUNC(1.25817, 2) AS "2",
    TRUNC(1.25817, 3) AS "3",
    TRUNC(1.25817, 4) AS "4"
FROM DUAL;

Резултат:

     1       2        3         4 
______ _______ ________ _________ 
   1.2    1.25    1.258    1.2581 

Отрицателни десетични знаци

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

Пример:

SELECT TRUNC(6973.45, -2)
FROM DUAL;

Резултат:

   TRUNC(6973.45,-2) 
____________________ 
                6900

В сравнение с ROUND()

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

Ето сравнение, за да демонстрирате тази разлика:

SELECT 
    TRUNC(3.6789, 2),
    ROUND(3.6789, 2)
FROM DUAL;

Резултат:

   TRUNC(3.6789,2)    ROUND(3.6789,2) 
__________________ __________________ 
              3.67               3.68 

Също така е различно от FLOOR() функция, която връща най-голямото цяло число, равно на или по-малко от неговия аргумент. FLOOR() не приема втори аргумент като ROUND() и TRUNC() do (това така или иначе връща само цяло число).

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

Ако някой аргумент е null , резултатът е null :

SET NULL 'null';

SELECT 
    TRUNC(null, 2),
    TRUNC(2.35, null),
    TRUNC(null, null)
FROM DUAL;

Резултат:

   TRUNC(NULL,2)    TRUNC(2.35,NULL)    TRUNC(NULL,NULL) 
________________ ___________________ ___________________ 
            null                null                null 

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

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

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

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

SELECT TRUNC('Hundred', 'Two')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRUNC('Hundred', 'Two')
FROM DUAL
Error report -
ORA-01722: invalid number

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

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

SELECT TRUNC()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRUNC()
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 TRUNC(1, 2, 3)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRUNC(1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 20
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. Как да създадете VARRAY като PL/SQL блоков член в базата данни на Oracle

  2. Как мога да въведа множество условия в оператора LIKE?

  3. SQLPlus - спулиране към множество файлове от PL/SQL блокове

  4. 12c Преместване на файлове с данни онлайн

  5. как да създадете съхранена процедура в oracle, която приема масив от параметри