带有MySQL的number_format()

时间:2009-12-21 10:25:18

标签: mysql

嘿,我需要一种方法从我的专栏decimal(23,2) NOT NULL DEFAULT '0.00'

中获取格式编号 在php中我可以使用这个函数number_format('1111.00', 2, ',', '.'); 它将返回1.111,00(在我们使用的德国,用于定义十进制数)

我将如何在mysql中执行此操作?用字符串替换?

8 个答案:

答案 0 :(得分:28)

http://blogs.mysql.com/peterg/2009/04/

在Mysql 6.1中,你可以进行格式化(X,D [,locale_name])

 SELECT format(1234567,2,’de_DE’);

目前此功能不存在,但您可以在数据库中设置您的语言环境my.ini检查它。

答案 1 :(得分:20)

由于性能下降,如果您只需要在SQL中使用,则可以使用FORMAT函数和3 REPLACE: 格式化后,将.替换为另一个字符@,然后将,替换为.,然后将,选择的字符替换为1.111,00引导您将您的示例带到SELECT REPLACE(REPLACE(REPLACE(FORMAT("1111.00", 2), ".", "@"), ",", "."), "@", ",")

{{1}}

答案 2 :(得分:10)

您可以使用

SELECT round(123.4566,2)  -> 123.46

答案 3 :(得分:7)

FORMAT(X,D)将数字X格式化为'#,###,###。##'等格式,舍入到D小数位,并将结果作为字符串返回。如果D为0,则结果没有小数点或小数部分。

 SELECT FORMAT(12332.123456, 4);
        -> '12,332.1235'

答案 4 :(得分:3)

安东尼奥的回答

CONCAT(REPLACE(FORMAT(number,0),',','.'),',',SUBSTRING_INDEX(FORMAT(number,2),'.',-1))

错了;它可能会产生不正确的结果!

例如,如果“number”为12345.67,则结果字符串为:

'12.346,67'

而不是

'12.345,67'

因为如果小数部分大于或等于0.5(如我的例子中所示),FORMAT(数字,0)向上舍入“数字”!

您可以使用的是

CONCAT(REPLACE(FORMAT(FLOOR(number),0),',','.'),',',SUBSTRING_INDEX(FORMAT(number,2),'.',-1))

如果您的MySQL / MariaDB的FORMAT不支持“locale_name”(请参阅​​MindStalker的帖子 - Thx 4那个,朋友)。注意我添加的FLOOR功能。

答案 5 :(得分:3)

至少可以使用MySQL 5.5,你可以使用格式:

SELECT FORMAT(123456789.123456789,2);
/* produces 123,456,789.12 */

SELECT FORMAT(123456789.123456789,2,'de_DE');
/* 
    produces 123.456.789,12
    note the swapped . and , for the de_DE locale (German-Germany) 
*/

来自MySQL文档: https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_format

可用的语言环境列在文档的其他位置: https://dev.mysql.com/doc/refman/5.5/en/locale-support.html

答案 6 :(得分:0)

CREATE DEFINER=`yourfunctionname`@`%` FUNCTION `money`(
     `betrag` DECIMAL(10,2)

 )
 RETURNS varchar(128) CHARSET latin1
 LANGUAGE SQL
 NOT DETERMINISTIC
 CONTAINS SQL
 SQL SECURITY DEFINER
 COMMENT ''
 return(
     select replace(format(cast(betrag as char),2),',',"'") as betrag
 )

将使用以下代码创建MySql函数:

 select replace(format(cast(amount as char),2),',',"'") as amount_formated

答案 7 :(得分:-1)

你需要这个:

CONCAT(REPLACE(FORMAT(number,0),',','.'),',',SUBSTRING_INDEX(FORMAT(number,2),'.',-1))