2009-12-21 6 views
11

oye necesito una manera de obtener un número con formato de mi columna decimal(23,2) NOT NULL DEFAULT '0.00'Number_format() con MySQL

en php que podría utilizar esta función number_format('1111.00', 2, ',', '.'); volvería 1.111,00 (en Alemania utilizamos, para definir los números decimales)

¿cómo haré esto en mysql? con cadena reemplaza?

Respuesta

16

Con penalización de rendimiento y si necesita TODO sólo en SQL se puede utilizar la función FORMAT y 3 REPLACE: Después de que el formato de reemplazar el . con otra carbón, por ejemplo, @, vuelva a colocar la , con un . y luego el chararacter a elegir por un , que conducen por su ejemplo a 1.111,00

SELECT REPLACE(REPLACE(REPLACE(FORMAT("1111.00", 2), ".", "@"), ",", "."), "@", ",") 
+0

bien pienso Im que va seguir con la forma en php, THX para usted respuesta de todos modos – antpaw

+0

Usted es bienvenido :) – Patrick

+0

¡Esta no es la mejor respuesta! Existe la función de formato disponible, desplácese hacia abajo y eche un vistazo a algunas de las otras respuestas antes de usar esta solución. Lo importante a tener en cuenta aquí es la opción LOCAL disponible para la función 'format' que puede establecer (e, g, de_DE para alemán) –

6

fORMATO (X, d) Formatea el número X a un formato como '#, ###, ###. ##', redondeado a decimales D, y devuelve el resultado como una cadena. Si D es 0, el resultado no tiene punto decimal o parte fraccionaria.

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

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

en MySQL 6.1 va a ser capaz de hacer FORMATO (X, D [, nombreDeConfiguraciónRegional])

Como en

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

Por ahora esta habilidad no lo hace existe, aunque PUEDE ser capaz de establecer su configuración regional en su base de datos mi.ini verifíquelo.

+0

oi He intentado usar el parametro de locale y ahora encuentro que solo existe en MySQL 6. Gracias por la información. – Emerald214

+1

Lamentablemente, el tercer parámetro es ilegal en MariaDB 5.5.x – Code4R7

+0

Aquí está la lista de configuración regional https://dev.mysql.com/doc/refman/5.7/en/locale-support.html –

0

Esto es necesario:

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

¿Alguna explicación de cómo funciona esto? – KLee1

8

Usted puede utilizar

SELECT round(123.4566,2) -> 123.46 
+0

El problema con esta solución es el separador de miles, SELECCIONAR ronda (123456,2) -> 123456.00 –

3

respuesta de Antonio

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

está mal; ¡puede producir resultados incorrectos!

Por ejemplo, si "número" es 12.345,67, la cadena resultante sería:

'12.346,67' 

en lugar de

'12.345,67' 

porque FORMATO (número, 0) rondas "número" arriba si fraccional la parte es mayor o igual que 0.5 (como es en mi ejemplo)!

lo que usted podría utilizar es

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

si el formato de su MySQL/MariaDB de no soporta "nombreDeConfiguraciónRegional" (ver post de MindStalker - Thx 4 que, PAL). Tenga en cuenta la función FLOOR que he agregado.

1

Al menos tan atrás como MySQL 5.5 se puede utilizar el formato:

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) 
*/ 

De la documentación de MySQL: https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_format

lugares disponibles se enumeran en otra parte de la documentación: https://dev.mysql.com/doc/refman/5.5/en/locale-support.html

+0

gracias, forma fácil de arreglar number_format de MySQL => cliente – ParisNakitaKejser