Арифметические выражения (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.