当我期望它返回 0 时,以下查询返回 0.000。
SELECT IFNULL(TRUNCATE(NULL, 3), 0) FROM DUAL
这是为什么?
将其分开按预期工作,并在 TRUNCATE function documentation 和 IFNULL docs 中描述:
SELECT TRUNCATE(NULL, 3) FROM DUAL
返回空值。
SELECT IFNULL(null, 0) FROM DUAL
这将返回 0。那么为什么我在嵌套它们时会得到 0.000?
最佳答案
TRUNCATE(NULL,n)
的类型是 DOUBLE
。这可以通过使用 mysql
参数运行 --column-type
来看到:
$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 文档页面:
因此,您的结果是
0.000
,即 DOUBLE 的 0 被截断到小数点后 3 位。关于mysql - 将 IFNULL 与 TRUNCATE 组合时出现意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34066064/