FLOOR |
Plancher |
|---|---|
| Oracle Database SQL | Oracle 8i ou supérieure |
Syntaxe
| Floor(Nombre) |
Paramètres
| Nom | Description |
|---|---|
| Nombre | Ce paramètre permet d'indiquer l'expression contenant le nombre à traiter |
Description
Cette fonction retourne uniquement la partie entière d'un nombre en omettant les décimales et sans même en tenir compte.
Remarques
- Fonction de base pour l'arrondi inférieur : La fonction FLOOR est utilisée pour renvoyer la plus grande valeur entière inférieure ou égale à un nombre donné. Contrairement à l'arrondi classique (ROUND), elle ne tient pas compte de la décimale pour ajuster l'arrondi, mais applique systématiquement un tronquage vers le bas. Cela signifie que FLOOR(7.9) renvoie 7 et FLOOR(-3.2) renvoie -4. Elle est donc très utile lorsqu'un contrôle strict sur le sens d'arrondi est requis.
- Gestion cohérente des nombres négatifs : Une caractéristique importante de FLOOR est sa gestion cohérente des nombres négatifs. Alors que la fonction TRUNC se contente de retirer la partie décimale sans changement de signe, FLOOR abaisse toujours la valeur au prochain entier inférieur. Par exemple, TRUNC(-3.7) donne -3 mais FLOOR(-3.7) retourne -4. Ce comportement est particulièrement utile pour les calculs dans des algorithmes où l'arrondi inférieur strict est requis, y compris avec des nombres négatifs.
- Comparaison avec CEIL : FLOOR est souvent utilisée en complément de la fonction CEIL, qui retourne l'entier supérieur le plus proche. Ensemble, ces deux fonctions permettent de gérer des fourchettes numériques : CEIL pour déterminer le plafond, et FLOOR pour calculer le plancher. Cette dualité est précieuse pour des calculs de plages, de seuils, ou encore de tranches de données dans des rapports ou interfaces utilisateur.
- Utilisation dans les expressions complexes : La fonction FLOOR peut être utilisée dans des expressions mathématiques ou logiques plus complexes, comme dans des calculs de pagination, des arrondis de montant, ou la génération de clés de regroupement. Par exemple, pour grouper des salaires par tranches de 1000, on peut écrire FLOOR(salary / 1000). Cela permet un regroupement homogène sans effet de seuil dû à la décimale.
- Type de retour adapté à l'entrée : Le type de donnée retourné par FLOOR dépend du type de son paramètre. Si le paramètre est un NUMBER, la valeur retournée sera un NUMBER également, avec les décimales supprimées. Ce comportement permet une intégration fluide dans les expressions SQL, tout en conservant la précision nécessaire pour des traitements ultérieurs. Attention toutefois : si l'entrée est de type FLOAT, le résultat peut aussi être en FLOAT.
- Compatible avec les fonctions analytiques : Dans Oracle, FLOOR peut aussi être utilisée dans des fonctions analytiques ou des clauses OVER(...). Cela signifie qu'on peut appliquer FLOOR à des valeurs de colonnes calculées dynamiquement par partition ou sur des fenêtres de données. Par exemple, pour obtenir le plancher d'un rang ou d'une moyenne dans un groupe analytique, FLOOR(AVG(salary)) OVER (...) est une solution performante.
- Performances optimisées pour le calcul : La fonction FLOOR fait partie des fonctions arithmétiques les plus rapides d'Oracle car elle ne nécessite pas de traitement complexe ni de manipulation de chaîne. Elle repose sur une logique d'arrondi directe, optimisée au niveau du moteur SQL. Elle peut donc être utilisée à grande échelle dans des requêtes massives sans impact notable sur la performance.
- Compatibilité multi-version : FLOOR est une fonction standard présente depuis Oracle 8i et toujours maintenue dans les versions actuelles (jusqu'à Oracle 23c). Elle est également compatible avec d'autres bases de données SQL (PostgreSQL, SQL Server, MySQL), ce qui la rend précieuse dans les environnements multi-SGBD. Cette portabilité garantit un comportement identique et fiable dans divers contextes de migration.
- Utilisation avec des dates dans Oracle 23c : Depuis Oracle 23c, la fonction FLOOR accepte également des types de données temporels comme DATE, TIMESTAMP ou INTERVAL. Dans ce cas, elle agit comme une version spécialisée de TRUNC, en supprimant la précision temporelle selon la granularité souhaitée. Cela permet de manipuler des dates avec plus de contrôle dans les requêtes temporelles complexes.
- Cas d'usage en modélisation financière : Dans les contextes financiers, FLOOR est souvent utilisée pour gérer les arrondis défavorables dans des calculs de prêts, intérêts ou investissements. Par exemple, lors du calcul d'un nombre de mensualités, on peut vouloir éviter tout dépassement en arrondissant vers le bas. La fonction garantit alors qu'aucun centime n'est en excès, ce qui peut être une exigence réglementaire.
- Compatible avec NULL : Comme la plupart des fonctions numériques Oracle, FLOOR retourne NULL si son argument est NULL. Cela permet une intégration fluide dans des requêtes SQL complexes sans risque de levée d'erreur. Toutefois, dans certains contextes où un défaut de valeur est nécessaire, il peut être judicieux de l'associer à NVL, comme dans FLOOR(NVL(valeur, 0)).
- Attention à l'effet de bord dans les jointures : Lorsqu'elle est utilisée dans des sous-requêtes ou des jointures, FLOOR peut générer des effets de bord si elle est appliquée à des expressions déjà tronquées. Par exemple, FLOOR(salary/1000)*1000 donne un résultat différent de TRUNC(salary,-3) si salary est négatif. Il est donc important de comprendre le sens d'arrondi appliqué pour éviter des incohérences lors de comparaisons ou d'agrégations sur des données sensibles.
Exemple
Voici un exemple montrant une utilisation plus classique de cette fonction :
- SELECT 'FLOOR(1)=' AS Text,floor(1) AS Result FROM DUAL UNION
- SELECT 'FLOOR(1.1)=' AS Text,floor(1.1) AS Result FROM DUAL UNION
- SELECT 'FLOOR(1.7)=' AS Text,floor(1.7) AS Result FROM DUAL UNION
- SELECT 'FLOOR(-1)=' AS Text,floor(-1) AS Result FROM DUAL UNION
- SELECT 'FLOOR(-1.1)=' AS Text,floor(-1.1) AS Result FROM DUAL UNION
- SELECT 'FLOOR(-1.7)=' AS Text,floor(-1.7) AS Result FROM DUAL UNION
- SELECT 'FLOOR(30.2)=' AS Text,floor(30.2) AS Result FROM DUAL UNION
- SELECT 'FLOOR(-35.4)=' AS Text,floor(-35.4) AS Result FROM DUAL
on obtiendra le résultat suivant :
| TEXT | RESULT |
| FLOOR(-1)= | -1 |
| FLOOR(-1.1)= | -2 |
| FLOOR(-1.7)= | -2 |
| FLOOR(-35.4)= | -36 |
| FLOOR(1)= | 1 |
| FLOOR(1.1)= | 1 |
| FLOOR(1.7)= | 1 |
| FLOOR(30.2)= | 30 |
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015