web-dev-qa-db-ja.com

MySQLでのキャストからDECIMAL

私はMySQLで次のようにDecimalにキャストしようとしています:

CAST((COUNT(*) * 1.5) AS DECIMAL(2))

テーブルの行数(1.5倍)を、小数点以下2桁の浮動小数点数に変換しようとしています。

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を使用して整数から10進数にキャストするにはどうすればよいですか?

23
Ben

MySQLドキュメントから: 固定小数点タイプ(正確な値)-10進数、数値

標準SQLでは、構文DECIMAL(M)DECIMAL(M,0)と同等です

したがって、2桁の整数と0桁の10進数で数値に変換しています。代わりにこれを試してください:

CAST((COUNT(*) * 1.5) AS DECIMAL(12,2)) 
25
ypercubeᵀᴹ

MySQLは10進数にキャストします。

整数を10進数にキャスト:

select cast(9 as decimal(4,2));       //prints 9.00

キャスト整数8/5から10進数:

select cast(8/5 as decimal(11,4));    //prints 1.6000

文字列を10進数にキャスト:

select cast(".885" as decimal(11,3));   //prints 0.885

2つのint変数を10進数にキャスト

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

10進数を文字列にキャスト:

select cast(1.552 as char(10));   //shows "1.552"
20
Eric Leschinski

DECIMALには、PrecisionScaleの2つの部分があります。したがって、クエリの一部は次のようになります。

CAST((COUNT(*) * 1.5) AS DECIMAL(8,2))

Precisionは、値に格納される有効桁数を表します。
Scaleは、小数点以下に格納できる桁数を表します。

4
John Woo

別の方法として、私はあなたの目的のために、round()関数を使用することだと思います:

select round((10 * 1.5),2) // prints 15.00

あなたはそれを試すことができます こちら

0
Jake