Expressions arithmétiques (XQuery)

Tous les opérateurs arithmétiques sont pris en charge, sauf idiv. Les exemples suivants illustrent l'utilisation de base des opérateurs arithmétiques :

DECLARE @x xml
SET @x=''
SELECT @x.query('2 div 2')
SELECT @x.query('2 * 2')

Étant donné que idiv n'est pas pris en charge, une solution consiste à utiliser le constructeur xs:integer() :

DECLARE @x xml
SET @x=''
-- Following will not work
-- SELECT @x.query('2 idiv 2')
-- Workaround 
SELECT @x.query('xs:integer(2 div 3)')

Le type issu d'un opérateur arithmétique est basé sur les types des valeurs d'entrée. Si les opérandes sont de types différents, l'un d'eux, voire les deux si nécessaire, est converti dans un type de base primitif courant en fonction de la hiérarchie des types. Pour plus d'informations sur la hiérarchie des types, consultez Règles de conversion de types dans XQuery.

La promotion du type numérique se produit si les deux opérations sont de types de base numériques différents. Par exemple, l'ajout d'une valeur xs:decimal à une valeur xs:double convertirait la valeur décimale en une valeur double. L'ajout suivant aboutirait à une valeur double.

Les valeurs atomiques non typées sont converties dans le type de base numérique de l'autre opérande ou en xs:double si l'autre opérande est également non typé.

Limites de l'implémentation

Les limites sont les suivantes :

  • Les arguments des opérateurs arithmétiques doivent être de type numérique ou untypedAtomic.

  • Les opérations sur les valeurs xs:integer génèrent une valeur de type xs:decimal au lieu d'une valeur de type xs:integer.