当我预期它返回0时,以下查询返回0.000.
SELECT IFNULL(TRUNCATE(NULL, 3), 0) FROM DUAL
这是为什么?
将其分开按预期工作并在TRUNCATE function documentation和IFNULL docs中描述:
SELECT TRUNCATE(NULL, 3) FROM DUAL
返回null.
SELECT IFNULL(null, 0) FROM DUAL
这会返回0.那么为什么嵌套它们时会得到0.000?
最佳答案 TRUNCATE(NULL,n)的类型是DOUBLE.通过使用–column-type参数运行mysql可以看到这一点:
$mysql -u root --column-type testdb
mysql> SELECT(TRUNCATE(NULL,3));
Field 1: `(TRUNCATE(NULL,3))`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: DOUBLE
Collation: binary (63)
Length: 20
Max_length: 0
Decimals: 3
Flags: BINARY NUM
+--------------------+
| (TRUNCATE(NULL,3)) |
+--------------------+
| NULL |
+--------------------+
1 row in set (0,00 sec)
根据IFNULL文档页面:
The default result value of IFNULL(expr1,expr2) is the more “general” of the two expressions, in the order STRING, REAL, or INTEGER
因此,结果为0.000,0为DOUBLE截断为3位小数.