Поделиться через


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