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)
|