更新时间:2024-12-04 GMT+08:00
分享

数字操作函数

表1 数字操作函数列表

MySQL数据库

GaussDB数据库

差异

ABS()

支持

-

ACOS()

支持

-

ASIN()

支持

-

ATAN()

支持

-

ATAN2()

支持

-

CEILING()

支持,存在差异

部分操作结果类型以及CREATE TABLE AS的精度与MySQL不一致。

  • 入参为INT类型时,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。
  • 入参为BIGINT类型或BIGINT UNSIGNED类型,入参值大于等于20位时(包括符号位),GaussDB返回整型,MySQL 5.7返回DECIMAL。该情况下会导致嵌套场景时,CEILING函数作为内层函数存在差异。
    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE tt AS SELECT ceiling(-9223372036854775808);
    DESC tt;

    MySQL表字段返回类型为:DECIMAL(16,0)。

    GaussDB表字段返回类型为:BIGINT(17)。

  • 入参为NUMERIC类型时,返回类型可能与MySQL不一致。 当参数为常量、表字段时结果类型和MySQL 5.7保持一致。对于其他类型的入参如嵌套情况,结果会有差异,GaussDB返回NUMERIC类型,MySQL可能返回整型。
    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE t AS SELECT ceiling(-5.5);
    DESC t;

    MySQL表字段返回类型为:INT(5)。

    GaussDB表字段返回类型为:INT(5)。

    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE t AS SELECT ceiling(abs(5.5));
    DESC t;

    MySQL表字段返回类型为:INT(4)。

    GaussDB表字段返回类型为:DECIMAL(3,0)。

COS()

支持

-

DEGREES()

支持

-

EXP()

支持

-

FLOOR()

支持,存在差异

部分操作结果类型以及CREATE TABLE AS的精度与MySQL不一致。

  • 入参为INT类型时,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。
  • 入参为BIGINT类型或BIGINT UNSIGNED类型,入参值大于等于20位时(包括符号位),GaussDB返回整型,MySQL 5.7返回DECIMAL。该情况下会导致嵌套场景时,floor函数作为内层函数存在差异。
    -- 宽松模式下:
    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE tt AS SELECT floor(-9223372036854775808);
    DESC tt;

    MySQL表字段返回类型为:DECIMAL(16,0)。

    GaussDB表字段返回类型为:BIGINT(17)。

  • 入参为NUMERIC类型时,返回类型可能与MySQL不一致。 当参数为常量、表字段时结果类型和MySQL 5.7保持一致。对于其他类型的入参如嵌套情况,结果会有差异,GaussDB返回NUMERIC类型,MySQL可能返回整型。
    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE t AS SELECT floor(-5.5);
    DESC t;

    MySQL表字段返回类型为:INT(5)。

    GaussDB表字段返回类型为:INT(5)。

    SET m_format_behavior_compat_options='enable_precision_decimal';
    CREATE TABLE t AS SELECT floor(abs(5.5));
    DESC t;

    MySQL表字段返回类型为:INT(4)。

    GaussDB表字段返回类型为:DECIMAL(3,0)。

LN()

支持

-

LOG()

支持

-

LOG10()

支持

-

LOG2()

支持

-

PI()

支持,存在差异

精度传递开关关闭的情况下,也即m_format_behavior_compat_options中的enable_precision_decimal未设置时,PI函数的返回值精度与MySQL的有差异:MySQL中PI函数的结果仅保留四舍五入之后的小数后6位,而GaussDB的结果会保留四舍五入之后的小数后15位。

POW()

支持

-

POWER()

支持

-

RAND()

支持

-

SIGN()

支持

-

SIN()

支持

-

SQRT()

支持

-

TAN()

支持

-

TRUNCATE()

支持

-

CEIL()

支持

-

CRC32()

支持,存在差异

当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此入参为BINARY类型时,函数结果和MySQL不一致。

CONV()

支持

-

相关文档