В 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: