Catégories :

Fonctions numériques (arrondi et troncation)

TRUNCATE , TRUNC

Arrondit l’expression d’entrée à la valeur la plus proche (ou égale) de zéro. En fonction de la valeur que vous indiquez comme paramètre d’échelle, la transformation peut supprimer :

  • Tous les chiffres après la virgule, produisant une valeur entière. C’est l’utilisation par défaut et la plus courante de TRUNC pour les nombres.

  • Certains des chiffres significatifs après la virgule, ce qui donne une valeur moins précise.

  • Tous les chiffres significatifs après la virgule et quelques chiffres significatifs à gauche de la virgule, produisant une valeur qui est un multiple de 10, 100, ou une autre puissance de 10.

Les fonctions TRUNCATE et TRUNC sont synonymes.

Note

TRUNC est surchargé. Il peut également être utilisé avec des valeurs de date/heure pour tronquer les dates, les heures et les horodatages à une partie spécifiée. La fonction TRUNC numérique comporte un paramètre obligatoire et un paramètre facultatif. La fonction TRUNC date/heure comporte deux paramètres obligatoires.

Voir aussi :

CEIL, FLOOR, ROUND

Syntaxe

TRUNCATE( <input_expr> [ , <scale_expr> ] )

TRUNC( <input_expr> [ , <scale_expr> ] )
Copy

Arguments

input_expr

Valeur ou expression sur laquelle opérer. Le type de données doit être l’un des types de données numériques, tels que FLOAT ou NUMBER.

scale_expr

Le nombre de chiffres à inclure après la virgule. Utilisez une expression qui donne un entier compris entre -38 et +38.

La valeur scale_expr par défaut est zéro, ce qui signifie que la fonction supprime tous les chiffres après le point décimal.

Pour obtenir des informations sur les échelles négatives, consultez les Notes sur l’utilisation ci-dessous.

Renvoie

Le type de données de la valeur renvoyée est NUMBER (précision, échelle).

Si l’échelle d’entrée était supérieure ou égale à zéro, l’échelle de sortie correspond généralement à l’échelle d’entrée.

Si l’échelle d’entrée était négative, l’échelle de sortie est 0.

Par exemple :

  • Le type de données renvoyé par TRUNCATE(3.14, 1) est NUMBER(4, 1).

  • Le type de données renvoyé par TRUNCATE(3.14, 0) est NUMBER(4, 0).

  • Le type de données renvoyé par TRUNCATE(33.33, -1) est NUMBER(5, 0).

Si l’échelle est égale à zéro, la valeur est effectivement un entier.

Notes sur l’utilisation

  • Si scale_expr est négatif, alors il spécifie le nombre de positions avant le point décimal auquel le nombre doit être ajusté. Par exemple, si l’échelle est -2, le résultat est un multiple de 100.

  • Si scale_expr est plus grand que l’échelle d’expression en entrée, la fonction n’a aucun effet.

  • Si input_expr ou scale_expr est NULL, le résultat est NULL.

  • La troncature est effectuée vers 0, pas vers le plus petit nombre. Par exemple, TRUNCATE(-9.6) donne -9, et non -10.

Exemples

Les exemples suivants présentent la fonction TRUNC pour les valeurs numériques. Pour des exemples de troncature de dates, d’heures et d’horodatages, voir la forme date/heure de TRUNC.

Les exemples utilisent les données de cette table d’échantillons. La table contient deux nombres décimaux différents, -975,975 et 135,135, ainsi que différentes valeurs à utiliser pour le paramètre d’échelle avec la fonction TRUNC.

CREATE TABLE numeric_trunc_demo (n FLOAT, scale INTEGER);
INSERT INTO numeric_trunc_demo (n, scale) VALUES
   (-975.975, -1), (-975.975,  0), (-975.975,  2),
   ( 135.135, -2), ( 135.135,  0), ( 135.135,  1),
   ( 135.135,  3), ( 135.135, 50), ( 135.135, NULL);
Copy

Lorsque vous ne spécifiez pas de paramètre d’échelle, le comportement par défaut de TRUNC avec un paramètre numérique est de renvoyer la valeur entière égale au paramètre ou la plus proche de zéro. La spécification d’un paramètre d’échelle de 0 fait la même chose.

SELECT DISTINCT n, TRUNCATE(n)
  FROM numeric_trunc_demo ORDER BY n;
Copy
+----------+-------------+
|        N | TRUNCATE(N) |
|----------+-------------|
| -975.975 |        -975 |
|  135.135 |         135 |
+----------+-------------+

L’exemple suivant montre les résultats de l’appel à la fonction TRUNC avec des paramètres d’échelle nuls, positifs ou négatifs appliqués à un nombre positif et à un nombre négatif.

  • La spécification d’un paramètre d’échelle zéro supprime tous les chiffres après la virgule, produisant une valeur entière.

  • La spécification d’un paramètre d’échelle positif laisse le nombre spécifié de chiffres significatifs après la virgule.

  • La spécification d’un paramètre d’échelle négatif transforme ce nombre de chiffres en zéros à gauche de la virgule.

  • La spécification d’une échelle supérieure à +38 ou inférieure à -38 revient à spécifier +38 ou -38.

SELECT n, scale, TRUNC(n, scale)
  FROM numeric_trunc_demo ORDER BY n, scale;
Copy
+----------+-------+-----------------+
|        N | SCALE | TRUNC(N, SCALE) |
|----------+-------+-----------------|
| -975.975 |    -1 |        -970     |
| -975.975 |     0 |        -975     |
| -975.975 |     2 |        -975.97  |
|  135.135 |    -2 |         100     |
|  135.135 |     0 |         135     |
|  135.135 |     1 |         135.1   |
|  135.135 |     3 |         135.135 |
|  135.135 |    50 |         135.135 |
|  135.135 |  NULL |            NULL |
+----------+-------+-----------------+