Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction TRUNC (nombre) dans Oracle

Dans Oracle Database, le TRUNC(number) La fonction renvoie un nombre donné, tronqué à un nombre donné de décimales.

Oracle a également un TRUNC(date) fonction, qui est utilisée sur les dates. Cet article concerne uniquement le TRUNC(number) fonction, qui est utilisée sur les nombres.

Syntaxe

La syntaxe ressemble à ceci :

TRUNC(n1 [, n2 ])

n1 est la valeur à tronquer, et n2 est un argument facultatif qui spécifie le nombre de décimales à tronquer n1 pour. Si n2 est omis, alors n1 est tronqué à zéro décimale.

n1 peut être n'importe quel type de données numérique ou n'importe quel type de données non numérique qui peut être implicitement converti en un type de données numérique.

Exemple

Voici un exemple :

SELECT TRUNC(3.95)
FROM DUAL;

Résultat :

   TRUNC(3.95) 
______________ 
             3

Spécifiez une décimale

Voici un exemple de transmission d'un deuxième argument pour spécifier le nombre de décimales auxquelles tronquer la valeur :

SELECT TRUNC(1.25817, 2)
FROM DUAL;

Résultat :

   TRUNC(1.25817,2) 
___________________ 
               1.25

En voici d'autres :

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;

Résultat :

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

Décimales négatives

Le deuxième argument peut être une valeur négative si nécessaire. Le passage d'une valeur négative entraîne des chiffres vers la gauche de la décimale pour devenir zéro.

Exemple :

SELECT TRUNC(6973.45, -2)
FROM DUAL;

Résultat :

   TRUNC(6973.45,-2) 
____________________ 
                6900

Comparé à ROUND()

Le TRUNC() la fonction est différente de ROUND() une fonction. Le ROUND() La fonction arrondit le nombre vers le haut dans certains cas et vers le bas dans d'autres. Le TRUNC() fonction, d'autre part, tronque simplement le nombre sans arrondir.

Voici une comparaison pour illustrer cette différence :

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

Résultat :

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

C'est aussi différent du FLOOR() fonction, qui renvoie le plus grand entier égal ou inférieur à son argument. FLOOR() n'accepte pas un deuxième argument comme ROUND() et TRUNC() faire (il ne renvoie jamais qu'un entier de toute façon).

Valeurs nulles

Si un argument est null , le résultat est null :

SET NULL 'null';

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

Résultat :

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

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois qu'une valeur nulle se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Arguments non numériques

Voici ce qui se passe lorsque nous fournissons des arguments non numériques :

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

Résultat :

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

Nombre d'arguments non valides

Appel de TRUNC() avec le mauvais nombre d'arguments, ou sans argument entraîne une erreur :

SELECT TRUNC()
FROM DUAL;

Résultat :

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:

Et :

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

Résultat :

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: