更新时间:2024-12-06 GMT+08:00

比较函数

表1 比较函数列表

MySQL数据库

GaussDB数据库

差异

COALESCE()

支持,存在差异

union distinct场景下,返回值精度与MySQL不完全一致。

当第一个不为NULL的参数的后续参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。当参数为MIN函数、MAX函数时,返回值类型与MySQL不一致。

INTERVAL()

支持

-

GREATEST()

支持,存在差异

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL 5.7不一致,此处为MySQL 5.7存在的问题,MySQL 8.0修复了该问题,目前GaussDB和MySQL 8.0保持一致。

LEAST()

支持,存在差异

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL 5.7不一致,此处为MySQL 5.7存在的问题,MySQL 8.0修复了该问题,目前GaussDB和MySQL 8.0保持一致。

ISNULL()

支持,存在差异

  • 函数返回值类型在MySQL 5.7和MySQL 8.0中存在差异,结合MySQL 8.0的行为更为合理,因此函数返回值类型兼容MySQL 8.0。
  • 内层嵌套部分聚合函数时,部分场景返回结果MySQL 5.7和MySQL 8.0中存在差异,结合MySQL 8.0的行为更为合理,因此函数返回值兼容MySQL 8.0。
    m_db=# SELECT isnull(avg(1.23));
    ?column?
    ----------
    f
    (1 row)
    
    m_db=# SELECT isnull(group_concat(1.23));
    ?column?
    ----------
    f
    (1 row)
    
    m_db=# SELECT isnull(max('1.23'));
    ?column?
    ----------
    f
    (1 row)
    
    m_db=# SELECT isnull(min(1/2));
    ?column?
    ----------
    f
    (1 row)
    
    m_db=# SELECT isnull(std(3.14159 * 1.2345));
    ?column?
    ----------
    f
    (1 row)
    
    m_db=# SELECT isnull(sum('0.23400'));
    ?column?
    ----------
    f
    (1 row)