# 第九十六章 SQL函数 MOD 注:IRIS可用,非IRIS版本不可用。 标量数值函数,返回一个数除以另一个数的模数(余数)。 # 大纲 ```java MOD(dividend,divisor) {fn MOD(dividend,divisor)} ``` # 参数 - `dividend` - 数字,它是除法的分子(除数)。 - `divisor` - 数字,它是除法的分母(除数)。 `MOD` 返回 `NUMERIC` 数据类型,除非被除数是数据类型 `DOUBLE`。如果`dividend` 为 `DOUBLE`,则 `MOD` 返回 `DOUBLE`。 # 描述 `MOD` 返回除数除数的数学余数(模数)。 `MOD` 可以指定为标准标量函数或带有大括号语法的 `ODBC` 标量函数。 - 如果被除数和除数为正数,则返回正数模数或零。 - 如果被除数和除数都是负数,则返回负模数或零。 - 如果被除数或除数为 `NULL`,则返回 `NULL`。 - 如果除数为 `0`,它将生成带有 `%msg` ``错误的 `SQLCODE -400`。 - 如果除数大于被除数,则返回被除数。 `MOD`(任一语法形式)报告的精度与算术表达式除数/除数的精度报告相同。 # ANSI 运算符优先级 具有单个负操作数的 `MOD` 函数的行为取决于 `Apply ANSI Operator Precedence` 配置设置: - 如果未应用 `Apply ANSI Operator Precedence`,则带有负操作数的 `MOD` 的行为与 `#` 模运算符相同。两者都返回短计数(达到下一个倍数所需的数量),而不是模数。例如,`12#7` 返回模数 `5`; `–12#7` 返回短计数 `2`。如果被除数为负,短计数为正值或零。如果除数为负,则短计数为负值或零。 - 如果应用了 `Apply ANSI Operator Precedence`(IRIS 2019.1 及后续版本的默认设置),带有负操作数的` MOD` 的行为是始终返回模数。如果被除数为负,则返回负模数或零。如果除数为负,则返回正模数或零。 `# modulo operator` 的行为不受应用 `ANSI` 运算符优先级配置设置的影响。 # 示例 以下示例显示了 `MOD` 返回的余数。 ```sql SELECT MOD(5,3) AS Remainder 2 ``` ```sql SELECT MOD(5.3,.5) AS Remainder 0.3 ```