Арифметические выражения (XQuery)
Поддерживаются все арифметические операторы, за исключением idiv. Следующие примеры иллюстрируют использование арифметических операторов:
DECLARE @x xml
SET @x=''
SELECT @x.query('2 div 2')
SELECT @x.query('2 * 2')
Так как оператор idiv не поддерживается, необходимо использовать конструктор 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)')
Тип результата арифметического оператора зависит от типов входных значений. Если операнды имеют различные типы, то при необходимости они будут приведены к общему базовому типу в соответствии с иерархией типов. Дополнительные сведения об иерархии типов см. в разделе Правила приведения типов в запросах XQuery.
Если обе операции имеют различные числовые базовые типы, то проводится преобразование типов. Например, при сложении двух значений, одно из которых имеет тип xs:decimal, а второе — тип xs:double, сначала производится приведение десятичного значения к типу double. Затем выполняется операция сложения, в результате которой получается значение типа double.
Нетипизированные элементарные значения приводятся к базовому числовому типу второго операнда или к типу xs:double, если оба операнда не типизированы.
Ограничения реализации
Существуют следующие ограничения:
Аргументы арифметических операторов должны иметь числовой тип или тип untypedAtomic.
Даже в том случае, когда входные значения операторов имеют тип xs:integer, типом выходных значений является xs:decimal.