嘿,我需要一种方法从我的专栏decimal(23,2) NOT NULL DEFAULT '0.00'
number_format('1111.00', 2, ',', '.');
它将返回1.111,00
(在我们使用的德国,用于定义十进制数)
我将如何在mysql中执行此操作?用字符串替换?
答案 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))