to_number texto numero example entero convertir cast mysql sql

texto - signed mysql



Convierte texto en nĂºmero en consulta MySQL (9)

¿Es posible convertir texto en número dentro de la consulta MySQL? Tengo una columna con un identificador que consiste en 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 de acuerdo con el orden de los caracteres, es decir,

name-1 name-11 name-12 name-2

Si selecciono 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

Encontré la siguiente solución ... ORDER BY column * 1 . Si el nombre no contiene ningún número, ¿es seguro usar esa solución?


Esto debería funcionar:

SELECT field,CONVERT(SUBSTRING_INDEX(field,''-'',-1),UNSIGNED INTEGER) AS num FROM table ORDER BY num;


Para obtener el número, intente con SUBSTRING_INDEX(field, ''-'', 1) luego convierta.


Puede usar CAST() para convertir de cadena a int. por ejemplo, SELECT CAST(''123'' AS INTEGER);


Puede usar SUBSTRING y CONVERT :

SELECT stuff FROM table WHERE conditions ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER);

Donde name_column es la columna con los valores "name-". El SUBSTRING elimina todo antes del sexto carácter (es decir, el prefijo "nombre-") y luego el CONVERT convierte el valor restante en un número entero real.

ACTUALIZACIÓN : Dadas las circunstancias cambiantes en los comentarios (es decir, el prefijo puede ser cualquier cosa), tendrás que lanzar un LOCATE en la mezcla:

ORDER BY CONVERT(SUBSTRING(name_column, LOCATE(''-'', name_column) + 1), SIGNED INTEGER);

Por supuesto, esto supone que el prefijo no numérico no tiene guiones, pero el comentario relevante dice que:

name puede ser cualquier secuencia de letras

entonces eso debería ser una suposición segura.


Simplemente use CAST,

CAST(column_name AS UNSIGNED)

El tipo para el resultado del lanzamiento puede ser uno de los siguientes valores:

BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER]


Una forma genérica de hacer:

SELECT * FROM your_table ORDER BY LENTH(your_column) ASC, your_column ASC


si su clave principal es una cadena en un formato como

ABC / EFG / EE / 13/123 (número de secuencia)
este tipo de cuerda se puede usar fácilmente para clasificar con el delimitador ("/")

podemos usar la siguiente consulta para pedir una tabla con este tipo de clave

SELECT * FROM `TABLE_NAME` ORDER BY CONVERT(REVERSE(SUBSTRING(REVERSE(`key_column_name`), 1, LOCATE(''/'', REVERSE(`key_column_name`)) - 1)) , UNSIGNED INTEGER) DESC


una forma simple SELECCIONE ''123'' + 0


SELECT *, CAST(SUBSTRING_INDEX(field, ''-'', -1) AS UNSIGNED) as num FROM tableName ORDER BY num;