W bazie danych Oracle TRUNC(number)
funkcja zwraca podaną liczbę, skróconą do podanej liczby miejsc po przecinku.
Oracle ma również TRUNC(date)
funkcja, która jest używana w datach. Ten artykuł dotyczy wyłącznie TRUNC(number)
funkcja, która jest używana na liczbach.
Składnia
Składnia wygląda tak:
TRUNC(n1 [, n2 ])
Gdzie n1
to wartość do obcięcia, a n2
jest opcjonalnym argumentem, który określa, ile miejsc dziesiętnych należy obciąć n1
do. Jeśli n2
jest pominięty, to n1
jest obcinany do zera miejsc po przecinku.
n1
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 TRUNC(3.95)
FROM DUAL;
Wynik:
TRUNC(3.95) ______________ 3
Określ miejsce dziesiętne
Oto przykład przekazywania drugiego argumentu w celu określenia, do ilu miejsc dziesiętnych należy obciąć wartość:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Wynik:
TRUNC(1.25817,2) ___________________ 1.25
Oto kilka innych:
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;
Wynik:
1 2 3 4 ______ _______ ________ _________ 1.2 1.25 1.258 1.2581
Ujemne miejsca dziesiętne
Drugi argument może być wartością ujemną, jeśli jest to wymagane. Przekazanie wartości ujemnej powoduje, że cyfry są w lewo miejsca dziesiętnego na zero.
Przykład:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Wynik:
TRUNC(6973.45,-2) ____________________ 6900
W porównaniu z ROUND()
TRUNC()
funkcja jest inna niż ROUND()
funkcjonować. ROUND()
funkcja zaokrągla liczbę w górę w niektórych przypadkach, aw innych w dół. TRUNC()
z drugiej strony funkcja po prostu obcina liczbę bez zaokrąglania.
Oto porównanie pokazujące tę różnicę:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Wynik:
TRUNC(3.6789,2) ROUND(3.6789,2) __________________ __________________ 3.67 3.68
Różni się również od FLOOR()
funkcja, która zwraca największą liczbę całkowitą równą lub mniejszą od jej argumentu. FLOOR()
nie akceptuje drugiego argumentu, takiego jak ROUND()
i TRUNC()
zrób (i tak zawsze zwraca tylko liczbę całkowitą).
Wartości puste
Jeśli jakikolwiek argument ma wartość null
, wynik to null
:
SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Wynik:
TRUNC(NULL,2) TRUNC(2.35,NULL) TRUNC(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ć.
Argumenty nieliczbowe
Oto, co się dzieje, gdy dostarczamy argumenty nieliczbowe:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT TRUNC('Hundred', 'Two') FROM DUAL Error report - ORA-01722: invalid number
Nieprawidłowa liczba argumentów
Wywołanie TRUNC()
z niewłaściwą liczbą argumentów lub bez argumentu powoduje błąd:
SELECT TRUNC()
FROM DUAL;
Wynik:
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:
Oraz:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Wynik:
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: