web-dev-qa-db-fra.com

CAST à DECIMAL dans MySQL

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?

23
Ben

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)) 
25
ypercubeᵀᴹ

MySQL transforme en décimal:

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"
20
Eric Leschinski

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.

4
John Woo

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 :

0
Jake