| Каталог | Индекс раздела |
| Назад | Содержание | Вперед |
Арифметические выражения выполняют операции, которые включают в себя сложение, вычитание, умножение, деление и деление по модулю.
Следующая таблица описывает арифметические операторы, перечисляя их в порядке приоритетов операторов от высшего к низшему. Унарные операторы имеют высший приоритет, затем идут бинарные операторы, за исключением тех случаев, когда скобки заставляют вычислять бинарные операторы в первую очередь.
Таблица 1. Арифметические операторы в XQuery
| Оператор | Назначение | Направление |
-(унарный), + (унарный) | меняет знак значения операнда, сохраняет знак значения операнда | справа налево |
*, div, idiv, mod | умножение, деление, деление нацело, деление по модулю | слева направо |
+, - | сложение, вычитание | слева направо |
Примечание: Оператору вычитания должен предшествовать пробельный символ, если в противном случае оператор может быть проинтерпретирован как часть предыдущей лексемы. Например, a-b интерпретируется как имя, но a - b и a -b интерпретируются как арифметические операции. | ||
Результатом арифметического выражения является числовое значение, пустая последовательность или ошибка. Когда арифметическое выражение вычисляется, каждый операнд атомизируется (преобразуется в атомарное значение) и применяются следующие правила:
Если типы операндов после вычисления являются правильными комбинациями для арифметического оператора, то оператор применяется к атомизированным операндам и результат этой операции является атомарным значением или ошибкой (например, ошибка может получиться от деления на ноль.) Если типы операндов не являются правильными комбинациями для арифметического оператора, то возвращается ошибка.
Таблица 2 показывает правильные комбинации типов для арифметических операторов. В этой таблице буква A представляет первый операнд, а буква B представляет второй операнд. Слово "числовой" означает типы xs:integer, xs:decimal, xs:float, xs:double или любые типы, производные от них. Если результирующий тип оператора указан как числовой, то результирующий тип должен быть первым из упорядоченного списка (xs:integer, xs:decimal, xs:float, xs:double), в который все операнды могут быть преобразованы путем подстановки подтипов и перевода типов.
Таблица 2. Допустимые типы для операндов арифметических выражений
| Оператор с операндами | Тип операнда A | Тип операнда B | Результирующий тип |
| A + B | числовой | числовой | числовой |
| xdt:yearMonthDuration | xs:date | ||
| xdt:yearMonthDuration | xs:date | xs:date | |
| xs:date | xdt:dayTimeDuration | xs:date | |
| xdt:dayTimeDuration | xs:date | xs:date | |
| xs:time | xdt:dayTimeDuration | xs:time | |
| xdt:dayTimeDuration | xs:time | xs:time | |
| xs:dateTime | xdt:yearMonthDuration | xs:dateTime | |
| xdt:yearMonthDuration | xs:dateTime | xs:dateTime | |
| xs:dateTime | xdt:dayTimeDuration | xs:dateTime | |
| xdt:dayTimeDuration | xs:dateTime | xs:dateTime | |
| xdt:yearMonthDuration | xdt:yearMonthDuration | xdt:yearMonthDuration | |
| xdt:dayTimeDuration | xdt:dayTimeDuration | xdt:dayTimeDuration | |
| A - B | числовой | числовой | числовой |
| xs:date | xs:date | xdt:dayTimeDuration | |
| xs:date | xdt:yearMonthDuration | xs:date | |
| xs:date | xdt:dayTimeDuration | xs:date | |
| xs:time | xs:time | xdt:dayTimeDuration | |
| xs:time | xdt:dayTimeDuration | xs:time | |
| xs:dateTime | xs:dateTime | xdt:dayTimeDuration | |
| xs:dateTime | xdt:yearMonthDuration | xs:dateTime | |
| xs:dateTime | xdt:dayTimeDuration | xs:dateTime | |
| xdt:yearMonthDuration | xdt:yearMonthDuration | xdt:yearMonthDuration | |
| xdt:dayTimeDuration | xdt:dayTimeDuration | xdt:dayTimeDuration | |
| A * B | числовой | числовой | числовой |
| xdt:yearMonthDuration | числовой | xdt:yearMonthDuration | |
| числовой | xdt:yearMonthDuration | xdt:yearMonthDuration | |
| xdt:dayTimeDuration | числовой | xdt:dayTimeDuration | |
| числовой | xdt:dayTimeDuration | xdt:dayTimeDuration | |
| A idiv B | числовой | числовой | xs:integer |
| A div B | числовой | числовой | числовой, но xs:decimal, если оба операнда - xs:integer |
| xdt:yearMonthDuration | числовой | xdt:yearMonthDuration | |
| xdt:dayTimeDuration | числовой | xdt:dayTimeDuration | |
| xdt:yearMonthDuration | xdt:yearMonthDuration | xs:decimal | |
| xdt:dayTimeDuration | xdt:dayTimeDuration | xs:decimal | |
| A mod B | числовой | числовой | числовой |
Примеры
-3 div 2 -3 idiv 2
$emp/hiredate - $emp/birthdate
unit-price и unit-discount:
$unit-price - $unit-discount
| Назад | Содержание | Вперед |
| Каталог | Индекс раздела |