- 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.
Syntaxe¶
TRUNCATE( <input_expr> [ , <scale_expr> ] )
TRUNC( <input_expr> [ , <scale_expr> ] )
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)
estNUMBER(4, 1)
.Le type de données renvoyé par
TRUNCATE(3.14, 0)
estNUMBER(4, 0)
.Le type de données renvoyé par
TRUNCATE(33.33, -1)
estNUMBER(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
ouscale_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);
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;
+----------+-------------+
| 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;
+----------+-------+-----------------+
| 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 |
+----------+-------+-----------------+