Utilisation de fonctions mathématiques (Transact-SQL)

Une fonction mathématique effectue une opération mathématique sur des expressions numériques et retourne le résultat de l'opération. Les fonctions mathématiques opèrent sur les données numériques fournies par le système SQL Server : decimal, integer, float, real, money, smallmoney, smallint et tinyint. Par défaut, la précision des résultats des opérations effectuées par des fonctions intégrées sur des types de données float est de six décimales.

Par défaut, un chiffre soumis à une fonction mathématique sera interprété comme type de données decimal. Les fonctions CAST et CONVERT peuvent être utilisées pour convertir un type de données en un autre type de données, float par exemple. Ainsi, la valeur retournée par la fonction FLOOR est du même type de données que la valeur d'entrée. L'entrée de l'instruction SELECT suivante est une decimal. FLOOR retourne 123. Il s'agit d'une valeur décimale.

SELECT FLOOR(123.45);

---------------------
123

(1 row(s) affected)

Néanmoins, l'exemple suivant utilise une valeur float et FLOOR retourne une valeur float :

SELECT FLOOR (CONVERT (float, 123.45));

-------------------------------------
123.000000

(1 row(s) affected)

Une erreur due à un dépassement négatif se produit lorsque la fonction mathématique retourne un résultat de type float ou real trop petit pour être affiché. Un résultat égal à 0.0 est retourné et aucun message d'erreur n'est affiché. Par exemple, le calcul mathématique de 2 à la puissance -100.0 a pour résultat 0.0.

Des erreurs de domaine se produisent lorsque la valeur indiquée dans la fonction mathématique n'est pas valide. Par exemple, les valeurs indiquées dans la fonction ASIN doivent être comprises entre -1.00 et 1.00. Si un intervalle de -2 est spécifié, une erreur de domaine se produit.

Des erreurs d'intervalle se produisent lorsque la valeur spécifiée n'est pas comprise dans l'intervalle de valeurs autorisées. Par exemple, le résultat de la fonction POWER(10.0, 400) n'est pas compris dans l'intervalle de valeurs maximales de ~2e+308 pour le type de données float et le résultat de la fonction POWER(-10.0, 401) n'est pas compris dans l'intervalle de valeurs minimales de ~ -2e+308 pour le type de données float.

Le tableau suivant présente les fonctions mathématiques qui retournent une erreur de domaine ou d'intervalle.

Fonction mathématique

Résultat

SQRT(-1)

Erreur de domaine

POWER(10.0, 400)

Erreur arithmétique de dépassement positif

POWER(10.0, -400)

Valeur égale à 0.0 (dépassement négatif)

Des programmes d'interruption d'erreurs sont fournis pour gérer les erreurs de domaine et d'intervalle de ces fonctions. Vous pouvez utiliser les paramètres suivants :

  • SET ARITHABORT ON. Termine la requête et quitte la transaction définie par l'utilisateur. SET ARITHABORT remplace le paramètre SET ANSI_WARNINGS.

  • SET ANSI_WARNINGS ON. Arrête la commande.

  • SET ARITHIGNORE ON. Empêche l'affichage d'un message d'avertissement. Les paramètres SET ARITHABORT et SET ANSI_WARNINGS remplacent le paramètre SET ARITHIGNORE.

Si aucune de ces options n'est définie, SQL Server retourne NULL et affiche un message d'avertissement lorsque la requête est exécutée. Pour plus d'informations, consultez :

SET ARITHABORT (Transact-SQL)

SET ANSI_WARNINGS (Transact-SQL)

SET ARITHIGNORE (Transact-SQL)

La conversion interne de données en données de type float peut produire un résultat peu précis si les types de données money ou numeric sont utilisés.