更新时间:2025-06-30 GMT+08:00

流程控制函数

表1 流程控制函数列表

函数名

与MySQL的差异

IF()

当第一个参数为TRUE且第三个参数表达式中存在隐式类型转换错误,或者第一个参数为FALSE且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。

IFNULL()

  • 当第一个参数不为NULL且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。
  • 当入参类型为float类型时,GaussDB结果值的精度与MySQL 8.0行为保持一致,例如:
    m_db=# CREATE TABLE t1(c1 float);
    CREATE TABLE
    m_db=# INSERT INTO t1 VALUES(2.123);
    INSERT 0 1
    
    -- GaussDB的行为。
    m_db=# SELECT ifnull(c1, c1) FROM t1;
     ifnull 
    --------
      2.123
    (1 row)
    
    -- MySQL 5.7的行为。
    mysql> SELECT ifnull(c1, c1) FROM t1;
    +-------------------+
    | ifnull(c1, c1)    |
    +-------------------+
    | 2.122999906539917 |
    +-------------------+
    1 row in set (0.00 sec)
    
    -- MySQL 8.0的行为。
    mysql> SELECT ifnull(c1, c1) FROM t1;
    +----------------+
    | ifnull(c1, c1) |
    +----------------+
    |          2.123 |
    +----------------+
    1 row in set (0.00 sec)

NULLIF()

  • 在MySQL 5.7和MySQL 8.0中,函数返回值类型存在差异。鉴于MySQL 8.0更合理,因此GaussDB函数返回值类型兼容MySQL 8.0。
  • 当入参类型为float类型时,GaussDB结果值的精度与MySQL 8.0行为保持一致,例如:
    m_db=# CREATE TABLE t1(c1 float);
    CREATE TABLE
    m_db=# INSERT INTO t1 VALUES(2.123);
    INSERT 0 1
    
    -- GaussDB的行为。
    m_db=# SELECT nullif(c1, 1) FROM t1;
     nullif 
    --------
      2.123
    (1 row)
    
    -- MySQL 5.7的行为。
    mysql> SELECT nullif(c1, 1) SELECT t1;
    +-------------------+
    | nullif(c1, 1)     |
    +-------------------+
    | 2.122999906539917 |
    +-------------------+
    1 row in set (0.00 sec)
    
    -- MySQL 8.0的行为。
    mysql> SELECT nullif(c1, 1) SELECT t1;
    +---------------+
    | nullif(c1, 1) |
    +---------------+
    |         2.123 |
    +---------------+
    1 row in set (0.00 sec)