代码之家  ›  专栏  ›  技术社区  ›  antpaw

MySQL的数字格式()

  •  16
  • antpaw  · 技术社区  · 16 年前

    嘿,我需要一种从我的专栏中获取格式化数字的方法 decimal(23,2) NOT NULL DEFAULT '0.00'

    在php中,我可以使用这个函数 number_format('1111.00', 2, ',', '.'); 它会回来的 1.111,00 (在德国,我们使用,来定义十进制数)

    8 回复  |  直到 16 年前
        1
  •  23
  •   Patrick    16 年前

    如果只需要在SQL中执行,则可以使用 FORMAT 功能和3 REPLACE 在格式化后,替换 . @ ,然后更换 , 用一个 然后是你选择的角色 这让你的榜样 1.111,00

    SELECT REPLACE(REPLACE(REPLACE(FORMAT("1111.00", 2), ".", "@"), ",", "."), "@", ",")
    
        2
  •  32
  •   MindStalker    16 年前

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

    在Mysql 6.1中,您将能够进行格式化(X,D[,locale\u name])

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

    目前这个功能还不存在,尽管您可以在数据库my.ini中设置您的语言环境,请检查它。

        3
  •  11
  •   Alex    14 年前

    你可以用

    SELECT round(123.4566,2)  -> 123.46
    
        4
  •  7
  •   valli    16 年前

     SELECT FORMAT(12332.123456, 4);
            -> '12,332.1235'
        5
  •  3
  •   eyebeebai    12 年前

    安东尼奥的回答

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

    这是错误的;它可能会产生不正确的结果!

    例如,如果“number”是12345.67,则生成的字符串将是:

    '12.346,67'
    

    而不是

    '12.345,67'
    

    你能用的是

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

    如果您的MySQL/MariaDB格式不支持“locale_name”(请参阅Mindstapper的帖子-THX4,伙计)。注意我添加的楼层功能。

        6
  •  3
  •   Pete    8 年前

    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

        7
  •  0
  •   Konstantin XFlash Stratigenas    7 年前
    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
    
        8
  •  -1
  •   stealthyninja michkra    14 年前

    你需要这个:

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