写点什么

YashanDB 算术运算符

作者:YashanDB
  • 2025-04-01
    广东
  • 本文字数:2098 字

    阅读完需:约 7 分钟

本文内容来自 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 中,可实现除法运算的方式有:


  • 算术运算符:/、%

  • 内置函数:MODDIV


%


取模运算,与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。


示例



SELECT '44'/2 char_cal,TYPEOF('44'/2) type_transFROM dual; CHAR_CAL TYPE_TRANS
22 number
SELECT 2*CAST(2 AS FLOAT) int_cal,TYPEOF(2*CAST(2 AS FLOAT)) type_transFROM dual; INT_CAL TYPE_TRANS
4.0E+000 float
复制代码


# 日期时间型算术运算

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



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



示例


CREATE TABLE date_dd(a DATE, b DATE);INSERT INTO date_dd VALUES('2008-12-31','2018-12-31');COMMIT;     
SELECT b-a FROM date_dd; B-A
3652
SELECT b-1 FROM date_dd;B-1
2018-12-30 00:00:00 SELECT SYSDATE+2 FROM DUAL;SYSDATE+2
2021-06-10 11:07:47
CREATE TABLE date_dt(c1 DATE, c2 TIMESTAMP);INSERT INTO date_dt VALUES ('2020-03-31', '2020-03-31 12:30:59.999999');COMMIT; SELECT c1-2.5, c2-2.5 FROM date_dt;C1-2.5 C2-2.5
2020-03-28 12:00:00 2020-03-29 00:30:59 SELECT c1+'2.5', c2+'2.5' FROM date_dt;C1+'2.5' C2+'2.5'
2020-04-02 12:00:00 2020-04-03 00:30:59 SELECT c1 FROM date_dt;C1
2020-03-31 00:00:00
CREATE TABLE date_t(c1 TIME);INSERT INTO date_t VALUES ('23:59:59.999999');COMMIT; SELECT c1+INTERVAL '5' HOUR FROM date_t;C1+INTERVAL'5'HOUR
04:59:59.999999
复制代码


输出的日期如果不合法,结果会报错。


示例



SELECT C1+INTERVAL '01-01' YEAR TO MONTH FROM date_dt;
YAS-00008 type convert error : not a valid month
YAS-05012 date not valid for month specified
复制代码


发布于: 3 小时前阅读数: 7
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB算术运算符_数据库_YashanDB_InfoQ写作社区