Oracle
 sql >> Datenbank >  >> RDS >> Oracle

TRUNC(Zahl) Funktion in Oracle

In der Oracle-Datenbank der TRUNC(number) Die Funktion gibt eine bestimmte Zahl zurück, die auf eine bestimmte Anzahl von Dezimalstellen gekürzt wird.

Oracle hat auch einen TRUNC(date) Funktion, die bei Datumsangaben verwendet wird. In diesem Artikel geht es ausschließlich um den TRUNC(number) Funktion, die auf Zahlen angewendet wird.

Syntax

Die Syntax lautet wie folgt:

TRUNC(n1 [, n2 ])

Wobei n1 der zu kürzende Wert ist und n2 ist ein optionales Argument, das angibt, um wie viele Dezimalstellen n1 zu. Wenn n2 weggelassen wird, dann n1 wird auf null Dezimalstellen gekürzt.

n1 kann ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in einen numerischen Datentyp konvertiert werden kann.

Beispiel

Hier ist ein Beispiel:

SELECT TRUNC(3.95)
FROM DUAL;

Ergebnis:

   TRUNC(3.95) 
______________ 
             3

Geben Sie eine Dezimalstelle an

Hier ist ein Beispiel für die Übergabe eines zweiten Arguments, um anzugeben, auf wie viele Dezimalstellen der Wert gekürzt werden soll:

SELECT TRUNC(1.25817, 2)
FROM DUAL;

Ergebnis:

   TRUNC(1.25817,2) 
___________________ 
               1.25

Hier sind noch einige:

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;

Ergebnis:

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

Negative Dezimalstellen

Das zweite Argument kann bei Bedarf ein negativer Wert sein. Das Übergeben eines negativen Werts bewirkt Ziffern nach links der Dezimalstelle zu Null werden.

Beispiel:

SELECT TRUNC(6973.45, -2)
FROM DUAL;

Ergebnis:

   TRUNC(6973.45,-2) 
____________________ 
                6900

Im Vergleich zu ROUND()

Der TRUNC() Funktion unterscheidet sich von ROUND() Funktion. Das ROUND() Die Funktion rundet die Zahl in einigen Fällen auf und in anderen ab. Der TRUNC() Die Funktion hingegen schneidet die Zahl einfach ab, ohne zu runden.

Hier ist ein Vergleich, um diesen Unterschied zu demonstrieren:

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

Ergebnis:

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

Es unterscheidet sich auch von FLOOR() -Funktion, die die größte Ganzzahl zurückgibt, die gleich oder kleiner als ihr Argument ist. FLOOR() akzeptiert kein zweites Argument wie ROUND() und TRUNC() tun (es gibt ohnehin immer nur eine Ganzzahl zurück).

Nullwerte

Wenn irgendein Argument null ist , ist das Ergebnis null :

SET NULL 'null';

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

Ergebnis:

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

Standardmäßig geben SQLcl und SQL*Plus immer dann ein Leerzeichen zurück, wenn als Ergebnis eines SQL SELECT ein Nullwert auftritt Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Nicht numerische Argumente

Folgendes passiert, wenn wir nicht numerische Argumente angeben:

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

Ergebnis:

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

Ungültige Argumentanzahl

Aufruf von TRUNC() mit der falschen Anzahl von Argumenten oder ohne Argument führt zu einem Fehler:

SELECT TRUNC()
FROM DUAL;

Ergebnis:

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:

Und:

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Ergebnis:

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: