当我期望它返回 0 时,以下查询返回 0.000。

SELECT IFNULL(TRUNCATE(NULL, 3), 0) FROM DUAL

这是为什么?

将其分开按预期工作,并在 TRUNCATE function documentationIFNULL 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/

10-11 05:07