YashanDB 算术运算符
本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C/SQL%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C/%E8%BF%90%E7%AE%97%E7%AC%A6/%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6.html
YashanDB 提供如下算术运算符:

除法
YashanDB 中,可实现除法运算的方式有:
%
取模运算,与MOD函数同义。
格式为:n2 % n1
含义为:将 n2 整除 n1 后剩余的数值作为取模的结果,即余数,余数的正负符号与 n2 一致。
若 n1 为 0,不报错,而是直接将 n2 的值作为余数结果返回。
/
普通除法运算。
/与DIV的关系:
对于小数(FLOAT/DOUBLE/NUMBER),/与 DIV 算法一致。
对于整数,/作普通除法运算,DIV 作整除运算并返回商数。
一般情况下,在/或 DIV 运算里 0 不能作为除数,否则报错,但是在被除数是浮点数的情况下,不报错而是做如下特殊处理:
如果被除数是 Nan,计算结果为 Nan
如果被除数是正浮点数或 Inf,计算结果为 Inf
如果被除数是负浮点数或-Inf,计算结果为-Inf
运算优先级
从高到低的运算优先级为:+(取正)、-(取负)>*、/、%>+、-。同一优先级运算符从左向右执行。
可以使用双括号()来调整想达到的运算优先级。
数据类型
如下数据类型可能会参与到算术运算中:
数值型(除 BIT 外)
字符型
日期时间型
# 类型转换
在进行二元算术运算时,YashanDB 将通过隐式数据转换,将参与运算的数据类型统一到某个数据类型,统一原则为:
数值型加、减、乘法最小提升规则:按 TINYINT->SMALLINT->INT->BIGINT->NUMBER->FLOAT->DOUBLE 顺序向后统一。
数值型除法最小提升规则:按 TINYINT/SMALLINT/INT/BIGINT->NUMBER->FLOAT->DOUBLE 顺序向后统一。
字符型数据与数值型数据进行运算时,将会向数值型统一。
数值型、字符型数据与日期时间型数据进行运算时,将会向日期时间型统一。
# (1)整型数值之间统一规则
行列标题格为参与算术运算的数据类型;内容单元格为统一后的数据类型;–表示不支持两种数据类型参与算术运算。

Note:
BIGINT 类型与所有整数类型参与+、-、*、%、MOD、DIV 算术运算,或者对 BIGINT 类型作取负(-)运算时:
运算结果转换为 BIGINT 或 NUMBER 由系统内部决定,YashanDB 默认统一转换为 BIGINT,如因业务需要转换为 NUMBER,请联系我们的技术支持处理。
# (2)整型数值与其他数值之间统一规则
行列标题格为参与算术运算的数据类型;内容单元格为统一后的数据类型,其中(1)表示采用上面(1)整型数值之间统一规则;–表示不支持两种数据类型参与算术运算。

# (3)数值型与字符型统一规则
行列标题格为参与算术运算的数据类型;内容单元格为统一后的数据类型,其中(2)表示采用上面(2)整型数值与其他数值之间统一规则;–表示不支持两种数据类型参与算术运算。

# (4)数值型、字符型与日期时间型统一规则
行列标题格为参与算术运算的数据类型;内容单元格为统一后的数据类型,其中(3)表示采用上面(3)数值型与字符型统一规则;–表示不支持两种数据类型参与算术运算;YM 表示 INTERVAL YEAR TO MONTH,DS 表示 INTERVAL DAY TO SECOND,TS 表示 TIMESTAMP。

示例
# 日期时间型算术运算
日期时间型数据可参与如下算术运算:


如下是时间类型和时间间隔类型支持运算的详细情况,其中 YM 表示 INTERVAL YEAR TO MONTH,DS 表示 INTERVAL DAY TO SECOND,TS 表示 TIMESTAMP:


示例
输出的日期如果不合法,结果会报错。
示例
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/44c6591eedb84da46859eafda】。文章转载请联系作者。
评论