37

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

4

5 に答える 5

36

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

標準SQLでは、構文DECIMAL(M)は次のようになります。DECIMAL(M,0)

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

CAST((COUNT(*) * 1.5) AS DECIMAL(12,2)) 
于 2012-08-06T14:57:02.800 に答える
29

MySQL は Decimal にキャストします。

素の整数を 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"
于 2013-12-07T04:54:53.297 に答える
8

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

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

Precision値として格納される有効桁数を表します。
Scale 小数点以下の桁数を表します。

于 2012-08-06T15:03:37.390 に答える