mySQL格式数字输出,千位分隔符

Posted

技术标签:

【中文标题】mySQL格式数字输出,千位分隔符【英文标题】:mySQL format number output , thousands separator 【发布时间】: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 正确格式化它。

【问题讨论】:

【参考方案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,',','.');

【讨论】:

以上是关于mySQL格式数字输出,千位分隔符的主要内容,如果未能解决你的问题,请参考以下文章

.NET 通用数字格式与千位分隔符

如何在 Dart 中将数字格式化为千位分隔符

数字格式,去掉千位分隔符

如何格式化数字来定义千位分隔符?

带有千位分隔符和小数的数字格式(如有必要)

千位分组来格式化数字函数