【问题标题】:mySQL format number output , thousands separatormySQL格式数字输出,千位分隔符
【发布时间】:2012-09-11 11:05:14
【问题描述】:

我有一个 mySQL 查询,它输出带逗号的十进制字段。

SELECT Metals.Metal, FORMAT(Fixes.GBPam, 3) AS AM, FORMAT(Fixes.GBPpm, 3) AS PM,     
DATE_FORMAT(Fixes.DateTime, '%d-%m-%y') AS Date
FROM Fixes, Metals
WHERE Metals.Id = Fixes.Metals_Id

字段 GBPam 和 GBPpm 都是 decimal(10,5) 类型

现在我希望在我的 sql 查询中将 AM 和 PM 列格式化为小数点后 3 位 - 正确

我希望将成千上万的值格式化为 xxxx.xxx 而不是 x,xxx.xxx - 不正确

mysql 查询的示例输出:

Metal       AM          PM          Date
Gold        1,081.334   NULL    11-09-12
Silver      21.009      NULL    10-09-12
Platinum    995.650     NULL    11-09-12
Palladium   416.700     NULL    11-09-12

你能看到 Gold AM 的输出是 1,081.334 吗?如何让它输出 1081.334?

这对我来说很痛苦,因为我必须在 PHP 中搞砸以删除逗号。我宁愿让 mysql 正确格式化它。

【问题讨论】:

    标签: mysql format decimal


    【解决方案1】:

    只需使用ROUND,这是一个数值函数。 FORMAT 是一个字符串函数

    ROUND(Fixes.GBPam, 3)
    

    【讨论】:

    • 如果原始数字没有小数,则四舍五入不添加小数
    【解决方案2】:

    您可以为此使用replace 命令。

     REPLACE(Fixes.GBPam,',','')
    

    编辑: 关于您的问题,您可以这样做:

    SELECT Metals.Metal, ROUND(REPLACE(Fixes.GBPam,',',''),3) AS AM,
      ROUND(REPLACE(Fixes.GBPpm,',',''),3) AS PM,     
      DATE_FORMAT(Fixes.DateTime, '%d-%m-%y') AS Date
      FROM Fixes, Metals
    WHERE Metals.Id = Fixes.Metals_Id 
    

    【讨论】:

    • ROUND 是否四舍五入?例如round 对 1024.7854 有何影响?我会取回 1024.785 还是 1024.76?
    • 四舍五入到编号。指定的小数位数。在这里查看dev.mysql.com/doc/refman/5.0/en/…
    【解决方案3】:

    使用替换功能。无论字段是整数还是varchar,都可以。

    select replace(Fixes.GBPam,',','.');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2011-03-12
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多