mysql – 将IFNULL与TRUNCATE结合使用时出现意外结果

当我预期它返回0时,以下查询返回0.000.

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

这是为什么?

将其分开按预期工作并在TRUNCATE function documentationIFNULL 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位小数.

点赞