mysql:在truncate中使用if

ca1c2owp  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(362)

这是一个简单的查询。

SELECT `a`, TRUNCATE(`b` / 1000, 3) AS `b`
FROM (
    ...                         
) AS `m`
GROUP BY `a`
ORDER BY `a`

我要做的是根据b的值改变小数位数(实际为3)。
所以我试了这个:

SELECT `a`, TRUNCATE(`b` / 1000, IF(`b` < 10, 2, 3)) AS `b` ...

还有这个

SELECT `a `, IF(`b ` < 10, TRUNCATE(`b ` / 1000, 2), TRUNCATE(`b ` / 1000, 3)) AS `b `

如果 b 小于10,我要小数点后3位,否则2位。
但这似乎不起作用。。。
资源:https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html#function_if

byqmnocz

byqmnocz1#

只需更改您在查询中输入的位置值

SELECT `a `, IF(b  < 10, TRUNCATE(b  / 1000, 3), TRUNCATE(b  / 1000, 2))

作为b
如果(a<1,2,3)意味着如果a<1,那么2将作为结果中的一个值出现,因此您必须切换您的值位置
使用 round ```
SELECT a , IF(b < 10, round((b / 1000), 2), round((b / 1000), 3) ) AS b

函数的作用是:将数字舍入到指定的小数位数。
例子 `SELECT ROUND(345.156, 2);` 结果=345.16

SELECT ROUND(345.156, 2); result = 345.156

如果您不想舍入,那么在b值小于10的情况下,truncate将显示为0.00,那么不工作是什么意思?
当b<10时需要3个小数位,因此必须更改查询结果的位置
oo7oh9g9

oo7oh9g92#

如果在中的计算结果为真/假,您将查询的运行顺序放错了位置 If() . 以下可能有效:

SELECT `a `, 
        IF(`b ` < 10, 
           TRUNCATE(`b ` / 1000, 3), 
           TRUNCATE(`b ` / 1000, 2)
          ) AS `b `

相关问题