Mysql: использовать IF в TRUNCATE - PullRequest
0 голосов
/ 22 октября 2018

Это упрощенный запрос.

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

То, что я пытаюсь сделать, это изменить количество десятичных разрядов (фактическое 3) на основе значения b .

Итак, я попробовал это:

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 голосов
/ 22 октября 2018

Вы неверно указали порядок выполнения запросов в случае оценки true / false в If().Может работать следующее:

SELECT `a `, 
        IF(`b ` < 10, 
           TRUNCATE(`b ` / 1000, 3), 
           TRUNCATE(`b ` / 1000, 2)
          ) AS `b `
0 голосов
/ 22 октября 2018

просто измените позицию значений, которую вы указали в запросе

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

AS b

, если (a <1,2,3) означает, что если <1, то 2 придетв качестве значения в вашем результате, поэтому вам нужно изменить положение значений </p>

, использовать 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

Если вы не хотите округлять, тогда TRUNCATE будет отображать 0,00 в случае значения b меньше 10, так что вы подразумеваете под неработающим?

Вам нужно 3 знака после запятой, когда b <10, поэтому вам нужно изменить позицию вашего запроса </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...