当我预期它返回 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
。这可以通过使用 --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
,作为 DOUBLE 的 0 被截断为小数点后 3 位。
关于mysql - 将 IFNULL 与 TRUNCATE 结合使用时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066064/