J'essaie de caster en Decimal dans MySQL comme ceci:
CAST((COUNT(*) * 1.5) AS DECIMAL(2))
J'essaie de convertir le nombre de lignes d'une table (1,5 fois) en un nombre à virgule flottante avec deux chiffres après le point.
Code 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
Cela produit une erreur:
#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.
Un autre essai, cette distribution ne fonctionne pas non plus:
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
Comment utiliser mysql pour convertir un entier en décimal?
Depuis les documents MySQL: Types à virgule fixe (valeur exacte) - DÉCIMAL, NUMÉRIQUE :
En SQL standard, la syntaxe
DECIMAL(M)
est équivalente àDECIMAL(M,0)
Vous convertissez donc en un nombre avec 2 chiffres entiers et 0 chiffre décimal. Essayez plutôt ceci:
CAST((COUNT(*) * 1.5) AS DECIMAL(12,2))
Cast entier nu en décimal:
select cast(9 as decimal(4,2)); //prints 9.00
Cast Integers 8/5 en décimal:
select cast(8/5 as decimal(11,4)); //prints 1.6000
Cast chaîne en décimal:
select cast(".885" as decimal(11,3)); //prints 0.885
Cast deux variables int en décimal
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
Cast décimal retour à la chaîne:
select cast(1.552 as char(10)); //shows "1.552"
DECIMAL
se compose de deux parties: Precision
et Scale
. Une partie de votre requête ressemblera donc à ceci:
CAST((COUNT(*) * 1.5) AS DECIMAL(8,2))
Precision
représente le nombre de chiffres significatifs qui sont stockés pour les valeurs.Scale
représente le nombre de chiffres pouvant être stockés après la virgule décimale.
Une alternative, je pense pour votre objectif, est d'utiliser la fonction round ():
select round((10 * 1.5),2) // prints 15.00
Vous pouvez l'essayer ici :