
# 流程控制函数
表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) from t1; +-------------------+ | nullif(c1, 1)     | +-------------------+ | 2.122999906539917 | +-------------------+ 1 row in set (0.00 sec) -- MySQL 8.0的行为。 mysql> SELECT nullif(c1, 1) from t1; +---------------+ | nullif(c1, 1) | +---------------+ |         2.123 | +---------------+ 1 row in set (0.00 sec) ```    |
   
