2009-12-21 13 views
11

hey ho bisogno di un modo per ottenere un numero formattato da mia colonna decimal(23,2) NOT NULL DEFAULT '0.00'number_format() con MySQL

in php ho potuto utilizzare questa funzione number_format('1111.00', 2, ',', '.'); sarebbe tornare 1.111,00 (in Germania si usa per definire i numeri decimali)

come farei questo in mysql? con la stringa sostituisce?

risposta

16

con la pena di prestazioni e se avete bisogno todo solo in SQL è possibile utilizzare la funzione di FORMAT e 3 REPLACE: Dopo il formato di sostituire il . con un altro carattere, ad esempio @, quindi sostituire il , con un . e poi il chararacter si sceglie da un , che vi condurrà per il vostro esempio per 1.111,00

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

ok penso im gonna bastone con il modo in php, thx per la risposta comunque – antpaw

+0

Siete i benvenuti :) – Patrick

+0

Questa non è la migliore risposta! C'è la funzione di formato disponibile, scorrere verso il basso e dare un'occhiata ad alcune delle altre risposte prima di usare questa soluzione - la cosa importante da notare qui è l'opzione LOCALE disponibile per la funzione 'format' che puoi impostare (e, g, de_DE per tedesco) –

6

fORMAT (X, D) Formatta il numero X in un formato come '#, ###, ###. ##', arrotondato a D decimali e restituisce il risultato sotto forma di stringa. Se D è 0, il risultato non ha il punto decimale o la parte frazionaria.

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

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

in MySQL 6.1 si sarà in grado di fare FORMAT (X, D [, nome_impostazioni_locali])

Come in

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

Per ora questa possibilità non lo fa esiste, sebbene tu possa essere in grado di impostare la tua localizzazione nel tuo database my.ini verificarlo.

+0

oi Ho provato ad usare il parametro locale e ora lo trovo solo in MySQL 6. Grazie per le informazioni. – Emerald214

+1

Sfortunatamente il terzo parametro è illegale in MariaDB 5.5.x – Code4R7

+0

Ecco l'elenco delle impostazioni locali https://dev.mysql.com/doc/refman/5.7/en/locale-support.html –

0

Hai bisogno di questo:

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

Qualche spiegazione su come funziona? – KLee1

8

È possibile utilizzare

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

Il problema con questa soluzione è il separatore delle migliaia SELEZIONA round (123456,2) -> 123456.00 –

3

di Antonio risposta

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

è sbagliato; potrebbe produrre risultati errati!

Ad esempio, se "numero" è 12345,67, la stringa risultante sarebbe:

'12.346,67' 

anziché

'12.345,67' 

perché FORMATO (numero, 0) turni "numero" su se frazionata la parte è maggiore o uguale a 0.5 (come nel mio esempio)!

Che cosa si potrebbe utilizzare è

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

Se il formato MySQL/MariaDB di non supporta "nome_impostazioni_locali" (vedi post del Mindstalker - Thx 4 che, PAL). Nota la funzione FLOOR che ho aggiunto.

1

Almeno fino a MySQL 5.5 è possibile utilizzare il 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) 
*/ 

Dalla documentazione MySQL: https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_format

locali disponibili sono elencati altrove nella documentazione: https://dev.mysql.com/doc/refman/5.5/en/locale-support.html

+0

grazie, modo semplice per correggere numero_formato da MySQL => client – ParisNakitaKejser