算术表达式

算术表达式执行涉及加法、减法、乘法、除法和模数的运算。

下表按从高到低的运算符优先级顺序描述并列示算术运算符。 除非使用圆括号强制对二目运算符进行求值,否则一元运算符的优先顺序高于二目运算符。
表 1. 算术运算符在 XQuery
运算符 用途 关联性
-(unary), +(unary) 对操作数的值求反,保留操作数的值 从右至左
*, div, idiv, mod 乘法,除法,除法求整,求模 从左至右
+, - 加法,减法 从左至右
注意 :如果减号运算符可能被解释为前一个标记的一部分,则必须在减号运算符前留出空格。 例如,a-b 解释为名称,但 a - ba -b 解释为算术运算。
限制 :算术运算符的运算数不能包含FLWOR表达式。

算术表达式的结果为以下各项之一:

  • 数字值
  • 日期或时间值
  • 持续时间值
  • 空序列
  • 一个错误

XQuery 使用以下过程来评估算术表达式。

  1. 将每个操作数分解为一系列原子值。
  2. 使用以下规则来评估算术表达式中的操作数:
    • 如果雾化操作数是空序列,则算术表达式的结果也是空序列。
    • 如果原子化操作数是包含多个值的序列,那么会返回错误。
    • 如果雾化操作数是一个未类型的原子值( xs:untypedAtomic ),则 XQuery 将值转换为xs:double。 如果铸造失败, XQuery 会返回错误。
  3. 如果操作数的类型是算术运算符的有效组合, XQuery 会将运算符应用于原子值。 运算的结果是原子值或动态错误(例如,除数为零可能会导致错误)。
  4. 如果操作数的类型与算术运算符不匹配, XQuery 将引发类型错误。
下表列出了算术运算符的有效类型组合。 在下表中,字母 A 表示表达式中的第一个操作数,字母 B 表示第二个操作数。 数字一词表示xs:integer、xs:decimal、xs:double或从这些类型之一派生的任何类型。 如果运算符的结果类型被列为数字类型,则结果类型将是有序列表中的第一种类型(xs:integer、xs:decimal、xs:double),所有操作数都可以通过子类型替换和类型提升转换为该类型。
表 2. 算术表达式操作数有效类型
带操作数的运算符 操作数 A 的类型 操作数 B 的类型 结果类型
A + B 数值 数值 数值
xs:date xs:yearMonthDuration xs:date
xs:yearMonthDuration xs:date xs:date
xs:date xs:dayTimeDuration xs:date
xs:dayTimeDuration xs:date xs:date
xs:time xs:dayTimeDuration xs:time
xs:dayTimeDuration xs:time xs:time
xs:dateTime xs:yearMonthDuration xs:dateTime
xs:yearMonthDuration xs:dateTime xs:dateTime
xs:dateTime xs:dayTimeDuration xs:dateTime
xs:dayTimeDuration xs:dateTime xs:dateTime
xs:yearMonthDuration xs:yearMonthDuration xs:yearMonthDuration
xs:dayTimeDuration xs:dayTimeDuration xs:dayTimeDuration
A - B 数值 数值 数值
xs:date xs:date xs:dayTimeDuration
xs:date xs:yearMonthDuration xs:date
xs:date xs:dayTimeDuration xs:date
xs:time xs:time xs:dayTimeDuration
xs:time xs:dayTimeDuration xs:time
xs:dateTime xs:dateTime xs:dayTimeDuration
xs:dateTime xs:yearMonthDuration xs:dateTime
xs:dateTime xs:dayTimeDuration xs:dateTime
xs:yearMonthDuration xs:yearMonthDuration xs:yearMonthDuration
xs:dayTimeDuration xs:dayTimeDuration xs:dayTimeDuration
A * B 数值 数值 数值
xs:yearMonthDuration 数值 xs:yearMonthDuration
数值 xs:yearMonthDuration xs:yearMonthDuration
xs:dayTimeDuration 数值 xs:dayTimeDuration
数值 xs:dayTimeDuration xs:dayTimeDuration
A idiv B 数值 数值 xs:integer
A div B 数值 数值 numeric,但两个操作数都为 xs:integer 时则为 xs:decimal
xs:yearMonthDuration 数值 xs:yearMonthDuration
xs:dayTimeDuration 数值 xs:dayTimeDuration
xs:yearMonthDuration xs:yearMonthDuration xs:decimal
xs:dayTimeDuration xs:dayTimeDuration xs:decimal
A mod B 数值 数值 数值

语法

算术表达式

阅读语法图跳过可视化语法图乘法表达式 +乘法表达式?乘法表达式

乘法表达式

阅读语法图跳过可视化语法图 +?路径表达式 *dividivmod+?路径表达式

示例

以下查询使用算术表达式计算购买者对某件产品所缴纳的税款金额,税率是 8.25 %,并选择税额大于一个货币单位的描述元素。

SELECT XMLQUERY ('declare namespace pos="http://posample.org";
  /pos:product/description[price * .0825 > 1]'
  PASSING DESCRIPTION)
FROM T1
以下查询减去两个xs:date值,结果为 xs:yearMonthDuration 值 P8559D:
SELECT XMLQUERY(' xs:date("2005-10-10")
  - xs:date("1982-05-05")')
 FROM SYSIBM.SYSDUMMY1