2012-05-17 14 views
11

No encuentro una forma de ordenar una columna varchar como float. Aquí está mi petición SQL:Ordenar una columna VARCHAR como FLOAT con el operador CAST no funciona en MySQL

SELECT guid, number FROM table ORDER BY 'CAST(number AS FLOAT) DESC' 

La columna "número" se define así:

number varchar(20) ascii_general_ci 

Y los valores definidos en esta columna para mi prueba son:

0.00 
200.00 
20.00 
100.00 

MySQL ignorar por completo el operador CAST y ordenar las columnas por guid ...

¿Hay algún error en MySQL? o algo mal?

+0

^^ 'ORDER BY 'CAST (número AS FLOAT) DESC'' da como resultado' ORDER BY 'foo'' o' ORDER BY 'ehrlkherklth ektl k''. La 'ORDEN POR' en su declaración no tiene sentido ...... – arnoudhgz

Respuesta

32

Pruebe este truco (ayuda a ordenar cadenas como números) -

SELECT guid, number FROM table ORDER BY number * 1 DESC 

Esto ayudará a MySQL para emitir cadena a número.


Otra solución -

...CAST(value as DECIMAL(10,5)) 
+0

¡¡Funciona !!! Todavía no entiendo por qué el operador CAST no funciona, pero su truco solucionó mi problema. –

+2

No puedes convertir a FLOTAR. Eche un vistazo a la referencia de función CAST, no hay tipo FLOAT. – Devart

+1

Woooh, estás tan en lo cierto, si lo hago: SELECCIONA guid, número DE tabla ORDEN POR CAST (número ASÍ FIRMADO) DESC sin las comillas, ¡funciona! Lo intenté FIRMADO, pero no sin las comillas. Muchas gracias –

0

Si usted ha tomado GUID entonces el tamaño debe ser varchar(40) Insted de que se pueden utilizar uuid()

lo he hecho usando

select uuid(), number order by 'cast(number as float) desc'; 

Está funcionando bien. Si no es así, ¿puede enviar su código completo?

+0

que acaba de ordenar por una cadena fija –

Cuestiones relacionadas