¿Es posible convertir texto en número dentro de la consulta MySQL? Tengo una columna con un identificador que consta de un nombre y un número en el formato de "nombre-número". La columna tiene el tipo VARCHAR. Quiero ordenar las filas según el número (filas con el mismo nombre) pero la columna se ordena según el orden de los caracteres, es decir
name-1
name-11
name-12
name-2
Si corto el número, ¿puedo convertir el número 'varchar' en el número 'real' y usarlo para ordenar las filas? Me gustaría obtener el siguiente orden.
name-1
name-2
name-11
name-12
No puedo representar el número como una columna separada.
editado 2011-05-11 9:32
He encontrado la siguiente solución ... ORDER BY column * 1
. Si el nombre no contiene ningún número, ¿es seguro usar esa solución?
name
Puede ser cualquier secuencia de letras.Respuestas:
Esto debería funcionar:
fuente
Puedes usar
SUBSTRING
yCONVERT
:¿Dónde
name_column
está la columna con los valores "nombre-". ElSUBSTRING
elimina todo antes del sexto carácter (es decir, el prefijo "nombre-") y luegoCONVERT
convierte el sobrante en un entero real.ACTUALIZACIÓN : Dadas las circunstancias cambiantes en los comentarios (es decir, el prefijo puede ser cualquier cosa), tendrá que agregar un
LOCATE
mix:Por supuesto, esto supone que el prefijo no numérico no tiene guiones, pero el comentario relevante dice que:
así que debería ser una suposición segura.
fuente
SUBSTRING(name_column, 6)
. Lo sé, lo publicaste cuando no nos dijo esto ...Simplemente use CAST,
El tipo para el resultado de conversión puede ser uno de los siguientes valores:
fuente
Puede usar CAST () para convertir de cadena a int. p.ej
SELECT CAST('123' AS INTEGER);
fuente
SELECT CAST('123' AS SIGNED INTEGER);
oSELECT CAST('123' AS UNSIGNED INTEGER);
hacerlo funcionar.fuente
una forma simple SELECCIONE '123' + 0
fuente
Para obtener el número, intente con
SUBSTRING_INDEX(field, '-', 1)
luego convertir.fuente
Si su clave principal es una cadena en un formato como
ABC / EFG / EE / 13/123 (número de secuencia),
este tipo de cadena se puede usar fácilmente para ordenar con el delimitador ("/")
podemos usar la siguiente consulta para ordenar una tabla con este tipo de clave
fuente
fuente
Una forma genérica de hacer:
fuente