Я столкнулся с проблемой, когда не получалось ожидаемое количество выводимых десятичных знаков при использовании функции ROUND()
в функции CONCAT()
.
Я упростил и воспроизвел проблему в этой SQL Fiddle
Пример кода создания базы данных и ввода данных (из sqlfiddle):
CREATE TABLE `test` ( `Amount` DECIMAL(10,5) NOT NULL , `Decimals` SMALLINT(6) NOT NULL ) ENGINE = InnoDB;
INSERT INTO test (Amount, Decimals) VALUES
(100.12345, 1),
(100.12345, 2),
(100.12345, 3);
Запрос на воспроизведение проблемы:
SELECT CONCAT(ROUND(`Amount`, Decimals), ' ') FROM test
Все строки выводятся с 5 десятичными разрядами.
Этот запрос дает правильные результаты:
SELECT ROUND(`Amount`, Decimals) FROM test
Я думаю, что нашел ошибку? Если да, то есть ли какой-нибудь другой способ, который я могу использовать тем временем, который будет работать правильно? В моем примере из реального мира мне нужно объединить показания счетчика, округленные до указанных десятичных знаков, с текстом для единицы измерения (например, часы, мили). Мой фактический SQL для этой части выглядит так:
CONCAT(ROUND(`MeterInstances`.`Reading`, `Meters`.`DecimalPlaces`), ' ', `Meters`.`Units`)