【问题标题】:CAST to DECIMAL in MySQL在 MySQL 中转换为十进制
【发布时间】:2012-08-06 14:41:37
【问题描述】:

我正在尝试像这样在 MySQL 中转换为 Decimal:

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

我正在尝试将表中的行数(乘以 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将整数转换为十进制?

【问题讨论】:

  • 什么麻烦?您是否有显示问题的特定错误消息或结果?
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“CAST((COUNT(*) * 1.5) AS DECIMAL(12,2))”附近使用正确的语法。
  • 我查看了文档,但不明白为什么我的代码不起作用:S
  • 向我们展示整个代码,而不仅仅是一行。这个SQL-Fiddle 工作正常。
  • GROUP BY Guardian ??? Guardian 是一张桌子,对吧?不应该是GROUP BY Guardian.id 吗?

标签: mysql casting decimal


【解决方案1】:

来自 MySQL 文档:Fixed-Point Types (Exact Value) - DECIMAL, NUMERIC

在标准 SQL 中,语法 DECIMAL(M) 等价于 DECIMAL(M,0)

因此,您将转换为具有 2 个整数位和 0 个小数位的数字。试试这个:

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

【讨论】:

  • 谢谢,虽然我已经尝试过了,但出现以下错误:#1064 - 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 'DECIMAL(12,2)) AS 'Cost' 附近使用的正确语法
  • @Ben:不要在此处使用单引号:AS 'Cost'。使用:AS Cost
  • 谢谢,但删除引号后我仍然收到错误消息。
【解决方案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 有两个部分:PrecisionScale。因此,您的部分查询将如下所示:

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

    Precision 表示为值存储的有效位数。
    Scale表示小数点后可以存储的位数。

    【讨论】:

      【解决方案4】:

      我很懒:

      0 + colname
      

      此外,这适用于任何小数位数、浮点数等的固定。

      另请参阅 ROUND()FORMAT()

      【讨论】:

        【解决方案5】:

        我认为,出于您的目的,另一种选择是使用 round() 函数:

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

        你可以试试here

        【讨论】:

          猜你喜欢
          • 2014-04-20
          • 2011-08-07
          • 2015-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          • 2012-06-17
          • 2022-01-14
          相关资源
          最近更新 更多