2012-09-11 357 views
2

我有一个用逗号输出十进制字段的mySQL查询。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查询小数点后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正确格式化。

回答

7

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

ROUND(Fixes.GBPam, 3) 
1

可以使用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 
+0

轮回吗?例如什么会舍弃到1024.7854?我会回到1024.785或1024.76吗? – Gravy

+0

它围绕到没有。指定的小数位数。在这里检查https://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_round – heretolearn

0

使用顶替功能。无论该字段是整数还是varchar,它都可以工作。

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