开发者社区 问答 正文

OceanBase的算术运算符


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

“+”、“-”、“*”的操作类型对照如下表所示:
INTFLOATDOUBLETIMESTAMPVARCHARBOOL
INTINTDOUBLEDOUBLEErrorDOUBLE/ErrorError
FLOATDOUBLEDOUBLEErrorDOUBLE/ErrorError
DOUBLEDOUBLEErrorDOUBLE/ErrorError
TIMESTAMPErrorErrorError
VARCHARDOUBLE/ErrorError
BOOLError

“/”的操作类型对照如下表,如果除数为零则报错。
INTFLOATDOUBLETIMESTAMPVARCHARBOOLNULL
INTDOUBLE/ErrorDOUBLE/ErrorDOUBLE/ErrorErrorDOUBLE/ErrorErrorNULL/Error
FLOATDOUBLE/ErrorDOUBLE/ErrorErrorDOUBLE/ErrorErrorNULL/Error
DOUBLEDOUBLE/ErrorErrorDOUBLE/ErrorErrorNULL/Error
TIMESTAMPErrorErrorErrorError
VARCHARDOUBLE/ErrorErrorNULL/Error
BOOLErrorError
NULLNULL

“%”和“MOD”的操作类型对照如下表。
[backcolor=transparent]INT[backcolor=transparent]FLOAT[backcolor=transparent]DOUBLE[backcolor=transparent]TIMESTAMP[backcolor=transparent]VARCHAR[backcolor=transparent]BOOL[backcolor=transparent]NULL
INTINTDOUBLEDOUBLEErrorDOUBLE/ErrorErrorNULL
FLOATDOUBLEDOUBLEErrorDOUBLE/ErrorErrorNULL
DOUBLEDOUBLEErrorDOUBLE/ErrorErrorNULL
[tr=rgb(239, 251, 255)][td]TIMESTAMP ErrorErrorErrorError VARCHARDOUBLE/ErrorErrorNULL/Error BOOLErrorError NULLNULL

展开
收起
云栖大讲堂 2017-11-01 14:35:29 2118 分享 版权
阿里云 AI 助理回答

从您的描述中,可以看出OceanBase数据库对不同数据类型间的数值运算有着明确的规则和限制。这里我为您总结和简化一下关键点,以便更好地理解和应用这些运算规则:

数值计算基本规则:

  • 允许的运算符:包括加法+、减法-、乘法*、除法/(返回商)、取余%MOD(返回余数)、幂运算^
  • 字符串转DOUBLE:只有当字符串内容完全由数字组成,或者以空格、负号-开头后跟数字时,该字符串才能被转换为DOUBLE类型进行算术运算。否则,操作将报错。

数据类型间运算兼容性概览:

  1. 加法(+)、减法(-)、乘法(*)

    • 对于INTFLOATDOUBLE类型,相互间可以直接运算。
    • VARCHAR类型参与运算时,如果能转换为DOUBLE则参与计算,否则报错。
    • TIMESTAMPBOOL和其他非数值类型与数值类型混合运算会报错。
  2. 除法(/)

    • 所有数值类型(INT, FLOAT, DOUBLE)之间可以进行除法运算,但除数为0时结果为NULL
    • VARCHAR若能转换为DOUBLE则参与运算,否则报错。
    • 其他类型如TIMESTAMPBOOL等与数值类型运算报错。
  3. 取余(%MOD)

    • 规则类似于除法,支持INTFLOATDOUBLE之间的运算,且同样避免除数为0的情况。
    • VARCHAR若可转换为DOUBLE则参与,否则错误。
    • 不支持与TIMESTAMPBOOL等类型的运算。
  4. 幂运算(^)

    • 主要应用于数值类型(INT, FLOAT, DOUBLE)之间。
    • 字符串VARCHAR若能转换为DOUBLE则有效,否则不支持。
    • 不适用于非数值类型。

注意事项:

  • 当运算涉及VARCHAR类型时,务必确保其内容格式符合转换为数值的要求。
  • 任何运算中,若涉及到TIMESTAMPBOOLNULL与其他数值类型混合运算,都将导致错误。
  • 特别注意除法和取余运算中除数为零的情况,这会导致结果为NULL而不是报错。

通过遵循上述规则,您可以更有效地在OceanBase中执行数值计算,避免遇到类型不匹配或不支持的操作错误。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: