CAST to DECIMAL в MySQL
Я пытаюсь преобразовать в Decimal в MySQL следующим образом:
CAST((COUNT(*) * 1.5) AS DECIMAL(2))
Я пытаюсь преобразовать количество строк в таблице (times 1.5) в число с плавающей запятой с двумя цифрами после точки.
Код SQL:
SELECT CONCAT(Guardian.title, ' ',
Guardian.forename, ' ',
Guardian.surname) AS 'Guardian Name',
COUNT(*) AS 'Number of Activities',
(COUNT(*) * 1.5) AS 'Cost'
FROM Schedule
INNER JOIN Child ON Schedule.child_id = Child.id
INNER JOIN Guardian ON Child.guardian = Guardian.id
GROUP BY Guardian
ORDER BY Guardian.surname, Guardian.forename ASC
Выдается сообщение об ошибке:
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'CAST((COUNT(*) * 1.5) AS DECIMAL(12,2))' at line 1.
Другая попытка, этот приведение также не работает:
SELECT CONCAT(Guardian.title, ' ',
Guardian.forename, ' ',
Guardian.surname) AS 'Guardian Name',
COUNT(*) AS 'Number of Activities',
CAST((COUNT(*) * 1.5) AS DECIMAL(8,2)) AS 'Cost'
FROM Schedule
INNER JOIN Child ON Schedule.child_id = Child.id
INNER JOIN Guardian ON Child.guardian = Guardian.id
GROUP BY Guardian
ORDER BY Guardian.surname, Guardian.forename ASC
Как использовать mysql для преобразования из целого числа в десятичное?
Ответы
Ответ 1
Из MySQL docs: Типы с фиксированной точкой (точное значение) - DECIMAL, NUMERIC:
В стандартном SQL синтаксис DECIMAL(M)
эквивалентен DECIMAL(M,0)
Итак, вы конвертируете в число с 2 целыми числами и 0 десятичными цифрами. Вместо этого попробуйте:
CAST((COUNT(*) * 1.5) AS DECIMAL(12,2))
Ответ 2
MySQL отбрасывает десятичное значение:
Передача целого числа до десятичного:
select cast(9 as decimal(4,2)); //prints 9.00
Целочисленные целые числа от 8/5 до десятичных:
select cast(8/5 as decimal(11,4)); //prints 1.6000
Вставить строку до десятичной:
select cast(".885" as decimal(11,3)); //prints 0.885
Вставить две переменные int в десятичную
mysql> select 5 into @myvar1;
Query OK, 1 row affected (0.00 sec)
mysql> select 8 into @myvar2;
Query OK, 1 row affected (0.00 sec)
mysql> select @myvar1/@myvar2; //prints 0.6250
Вставить десятичное число в строку:
select cast(1.552 as char(10)); //shows "1.552"
Ответ 3
DECIMAL
имеет две части: Precision
и Scale
. Поэтому часть вашего запроса будет выглядеть так:
CAST((COUNT(*) * 1.5) AS DECIMAL(8,2))
Precision
представляет количество значащих цифр, которые сохраняются для значений.
Scale
представляет количество цифр, которое можно сохранить после десятичной точки.
Ответ 4
Я думаю, что альтернатива для вас - использовать функцию round():
select round((10 * 1.5),2) // prints 15.00
Вы можете попробовать это здесь: