Подтвердить что ты не робот

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 для преобразования из целого числа в десятичное?

4b9b3361

Ответ 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

Вы можете попробовать это здесь: