2011-12-23 18 views
6

Esiste una funzione incorporata in MySQL che rimuove gli zero finali a destra?MySQL Remove Trailing Zero

ho campioni e voglio la mia uscita di essere in questo modo:

1.0 ==> 1 
1.50 ==> 1.5 
10.030 ==> 10.03 
0.50 ==> 0.5 
0.0 ==> 0 
+2

Domande simili: [Rimuovere gli zero finali dai decimali in SQL Server] (http://stackoverflow.com/questions/2938296/remove-trailing-zeros-from-decimal-in-sql-server), [Riduci valore 0 in posizioni decimali] (http://stackoverflow.com/questions/1831466/drop-0-value-in-decimal-places) –

+0

possibile duplicato di [Rimuovere gli zero finali nel valore decimale con la modifica della lunghezza] (http: // stackoverflow .com/questions/7968531/remove-trailing-zeros-in-decimal-value-with-changing-length) – joran

risposta

8

risolve il mio problema con questo:

(TRIM(TRAILING '.' FROM(CAST(TRIM(TRAILING '0' FROM setpoint)AS char)))) AS setpoint 

esempio:

mysql> SELECT testid, designationid, test, measure, 
       (TRIM(TRAILING '.' FROM(CAST(TRIM(TRAILING '0' FROM setpoint)AS char)))) AS setpoint, 
       (TRIM(TRAILING '.' FROM(CAST(TRIM(TRAILING '0' FROM tmin)AS char)))) AS tmin, 
       (TRIM(TRAILING '.' FROM(CAST(TRIM(TRAILING '0' FROM tmax)AS char)))) AS tmax, 
     FROM tests 
+0

Questo non risolve in ultima analisi ciò che fa la stringa incorporata di MySQL al casting di tipo numerico? –

+3

30 diventerà 3. Questa è una risposta BAD e SBAGLIATA e non dovrebbe mai essere accettata! Christopher McGowan dà la risposta corretta. – Jannes

8

Il modo più semplice per lontano, basta aggiungere zero!

Esempi:

SET 
    @yournumber1="1.0", 
    @yournumber2="1.50", 
    @yournumber3="10.030", 
    @yournumber4="0.50", 
    @yournumber5="0.0" 
; 

SELECT 
    (@yournumber1+0), 
    (@yournumber2+0), 
    (@yournumber3+0), 
    (@yournumber4+0), 
    (@yournumber5+0) 
; 

+------------------+------------------+------------------+------------------+------------------+ 
| (@yournumber1+0) | (@yournumber2+0) | (@yournumber3+0) | (@yournumber4+0) | (@yournumber5+0) | 
+------------------+------------------+------------------+------------------+------------------+ 
|    1 |    1.5 |   10.03 |    0.5 |    0 | 
+------------------+------------------+------------------+------------------+------------------+ 
1 row in set (0.00 sec) 

Se la colonna vostro valore proviene da è decimale o tipo numerico, poi gettarlo ai stringa prima per assicurarsi che la conversione avviene ... Es:

SELECT (CAST(`column_name` AS CHAR)+0) FROM `table_name`; 

per un modo più breve, basta usare qualsiasi funzione di stringa built-in per fare il cast:

SELECT TRIM(`column_name`)+0 FROM `table_name`; 
+2

'TRIM() + 0' è perfetto! – Mvorisek

-1

ho avuto un SI problema diffuso in una situazione in cui non potevo modificare il codice né la query SQL, ma mi è stato permesso di modificare la struttura del database. Così ho cambiato il formato della colonna da DECIMAL a FLOAT e ha risolto il mio problema.

+1

Potrebbe essere un cambiamento pericoloso. Il tipo DECIMAL viene utilizzato per i valori esatti. Il tipo FLOAT è per valori approssimativi. –