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 ])
Où 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: