Oracle
 sql >> Baza danych >  >> RDS >> Oracle

TRUNC(liczba) Funkcja w Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wartość ASCII w Oracle?

  2. Sprawdź, czy bieżąca data jest między dwiema datami Oracle SQL

  3. Błąd połączenia z lokalnym hostem Java Oracle (ORA-12505)

  4. Tabela przestawna z wartościami niekardynalnymi

  5. Uruchomić 2 zapytania jednocześnie w Oracle SQL Developer?