Арифметические выражения (XQuery)
Область применения: SQL Server
Поддерживаются все арифметические операторы, за исключением идивов. Следующие примеры иллюстрируют использование арифметических операторов:
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.
Нетипизированные атомарные значения отбрасываются к числовой базовой типу другого операнда или к xs:double , если другой операнды также нетипичен.
Ограничения реализации
Существуют следующие ограничения:
Аргументы для арифметических операторов должны быть числовыми или нетипизированными.
Операции с значениями xs:integer приводят к значению типа xs:decimal вместо xs:integer.