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

标签 mysql sql

当我预期它返回 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/

相关文章:

php - 使用 php 和 mysql 的搜索引擎无法检索带有希腊字符的数据

mysql - 将 MYSQL 查询 UPDATE 更改为 REPLACE INTO

php - Laravel Eloquent Join vs Inner Join?

mysql - 为什么我不能在 MySQL 中使用 ">"比较日期?

优先选择列值的 SQL 选择

sql - hive sql查找最新记录

MySQL - 选择在过去 y 天内至少下了 x 个订单并且在过去 z 天内没有订购的客户

php - 将个性 URL 链接到查询字符串 URL

PHP $_GET ['Variable' ] 在 $query 中回显但不求值

mysql - 如果 CONCAT 中有 'null' 值,则得到空结果