Mysql:在TRUNCATE中使用IF

时间:2018-10-22 09:04:52

标签: mysql sql

这是查询,经过简化。

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

2 个答案:

答案 0 :(得分:1)

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

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

AS b

if(a <1,2,3)表示如果a <1则2作为结果中的一个值,因此您必须切换值的位置

使用round

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

ROUND()函数将数字四舍五入到指定的小数位数。

示例SELECT ROUND(345.156, 2);结果= 345.16

     SELECT ROUND(345.156, 2);  result = 345.156

如果您不希望四舍五入,那么在b值小于10的情况下TRUNCATE将显示0.00,那么不工作意味着什么?

b <10时,您需要保留小数点后3位,因此您必须更改查询结果的位置

答案 1 :(得分:1)

If()中评估为真/假的情况下,您放错了查询的运行顺序。以下可能有效:

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