OceanBase中,数值计算只允许在数值类型和VARCHAR直接进行,其它类型直接报错。字符串在做算术运算时,如果无法转成DOUBLE类型则报错,比如“'3.4he' + 3”。字符串只有在内容全为数字或者开头是“+”或者“-”,且后面跟数字的形式才能转成DOUBLE型。
OceanBase支持的运算符如下表所示。
表达式 | 含义 | 举例 |
+ | 加法。 | SELECT 2+3; |
- | 减法。 | SELECT 2-3; |
* | 乘法。 | SELECT 2*3; |
/ | 除法,返回商。如果除数为“0”,则返回结果为“NULL”。 | SELECT 2/3; |
%或MOD | 除法,返回余数。如果除数为“0”,则返回结果为“NULL” | SELECT 2%3, 2 MOD 3; |
^ | 返回指定数值的指定幂运算结果。 | SELECT 2^2 |
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | |
INT | INT | DOUBLE | DOUBLE | Error | DOUBLE/Error | Error |
FLOAT | DOUBLE | DOUBLE | Error | DOUBLE/Error | Error | |
DOUBLE | DOUBLE | Error | DOUBLE/Error | Error | ||
TIMESTAMP | Error | Error | Error | |||
VARCHAR | DOUBLE/Error | Error | ||||
BOOL | Error |
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | NULL | |
INT | DOUBLE/Error | DOUBLE/Error | DOUBLE/Error | Error | DOUBLE/Error | Error | NULL/Error |
FLOAT | DOUBLE/Error | DOUBLE/Error | Error | DOUBLE/Error | Error | NULL/Error | |
DOUBLE | DOUBLE/Error | Error | DOUBLE/Error | Error | NULL/Error | ||
TIMESTAMP | Error | Error | Error | Error | |||
VARCHAR | DOUBLE/Error | Error | NULL/Error | ||||
BOOL | Error | Error | |||||
NULL | NULL |
[backcolor=transparent]INT | [backcolor=transparent]FLOAT | [backcolor=transparent]DOUBLE | [backcolor=transparent]TIMESTAMP | [backcolor=transparent]VARCHAR | [backcolor=transparent]BOOL | [backcolor=transparent]NULL | |
INT | INT | DOUBLE | DOUBLE | Error | DOUBLE/Error | Error | NULL |
FLOAT | DOUBLE | DOUBLE | Error | DOUBLE/Error | Error | NULL | |
DOUBLE | DOUBLE | Error | DOUBLE/Error | Error | NULL |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您的描述中,可以看出OceanBase数据库对不同数据类型间的数值运算有着明确的规则和限制。这里我为您总结和简化一下关键点,以便更好地理解和应用这些运算规则:
+
、减法-
、乘法*
、除法/
(返回商)、取余%
或MOD
(返回余数)、幂运算^
。-
开头后跟数字时,该字符串才能被转换为DOUBLE类型进行算术运算。否则,操作将报错。加法(+
)、减法(-
)、乘法(*
):
INT
、FLOAT
、DOUBLE
类型,相互间可以直接运算。VARCHAR
类型参与运算时,如果能转换为DOUBLE
则参与计算,否则报错。TIMESTAMP
、BOOL
和其他非数值类型与数值类型混合运算会报错。除法(/
):
INT
, FLOAT
, DOUBLE
)之间可以进行除法运算,但除数为0时结果为NULL
。VARCHAR
若能转换为DOUBLE
则参与运算,否则报错。TIMESTAMP
、BOOL
等与数值类型运算报错。取余(%
或 MOD
):
INT
、FLOAT
、DOUBLE
之间的运算,且同样避免除数为0的情况。VARCHAR
若可转换为DOUBLE
则参与,否则错误。TIMESTAMP
、BOOL
等类型的运算。幂运算(^
):
INT
, FLOAT
, DOUBLE
)之间。VARCHAR
若能转换为DOUBLE
则有效,否则不支持。VARCHAR
类型时,务必确保其内容格式符合转换为数值的要求。TIMESTAMP
、BOOL
或NULL
与其他数值类型混合运算,都将导致错误。NULL
而不是报错。通过遵循上述规则,您可以更有效地在OceanBase中执行数值计算,避免遇到类型不匹配或不支持的操作错误。