Как избежать округления DECIMAL при запросе SELECT SUM?

MariaDB 10.6.

Создал следующую функцию:

CREATE
    FUNCTION count_sum()
    RETURNS DECIMAL(19, 3)
BEGIN
    DECLARE result DECIMAL DEFAULT 0.000;

    SET result = (SELECT SUM(ba.amount) FROM billing_account AS ba);
    RETURN result;
END;

Здесь поле billing_account.amount имеет тип DECIMAL(19, 3). Однако, в результате вызова функции я получаю округлённое целочисленное значение. Каким образом я могу избежать округления, чтобы получить точное число с долями?


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Дело не в sum. Если тип просто DECIMAL, то в нем не хранится дробная часть (по умолчанию хранится 0 знаков после запятой). Используйте DECIMAL(32, 4) чтоб хранить 4 знака после запятой.

При вставке нецелых чисел в колонку типа DECIMAL значение обрезается и выдается предупреждение:

Data truncated for column

Такое же обрезание происходит, если присвоить значение переменной с типом DECIMAL, как в вашем случае.

→ Ссылка