Hola usuario de nuestra web, encontramos la solución a tu pregunta, desplázate y la hallarás más abajo.
Solución:
La gente usa diferentes trucos para hacer esto. Busqué en Google y descubrí algunos resultados, cada uno sigue diferentes trucos. Míralos:
- Clasificación alfanumérica en MySQL
- Clasificación natural en MySQL
- Clasificación de valores numéricos mixed con valores alfanuméricos
- clasificación natural mySQL
- Ordenación natural en MySQL
Editar:
Acabo de añadir el código de cada enlace para futuros visitantes.
Clasificación alfanumérica en MySQL
Entrada dada
1A 1a 10A 9B 21C 1C 1D
Rendimiento esperado
1A 1C 1D 1a 9B 10A 21C
Consulta
Bin Way
===================================
SELECT
tbl_column,
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC
-----------------------
Cast Way
===================================
SELECT
tbl_column,
CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC
Clasificación natural en MySQL
Entrada dada
Table: sorting_test -------------------------- ------------- | alphanumeric VARCHAR(75) | integer INT | -------------------------- ------------- | test1 | 1 | | test12 | 2 | | test13 | 3 | | test2 | 4 | | test3 | 5 | -------------------------- -------------
Rendimiento esperado
-------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
-------------------------- -------------
| test1 | 1 |
| test2 | 4 |
| test3 | 5 |
| test12 | 2 |
| test13 | 3 |
-------------------------- -------------
Consulta
SELECT alphanumeric, integer
FROM sorting_test
ORDER BY LENGTH(alphanumeric), alphanumeric
Clasificación de valores numéricos mixed con valores alfanuméricos
Entrada dada
2a, 12, 5b, 5a, 10, 11, 1, 4b
Rendimiento esperado
1, 2a, 4b, 5a, 5b, 10, 11, 12
Consulta
SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;
Espero que esto ayude
Sé que esta publicación está cerrada, pero creo que mi manera podría ayudar a algunas personas. Así que ahí está:
Mi conjunto de datos es muy similar pero es un poco más complejo. Tiene números, datos alfanuméricos:
1
2
Chair
3
0
4
5
-
Table
10
13
19
Windows
99
102
Dog
Me gustaría tener el símbolo ‘-‘ al principio, luego los números y luego el texto.
Así que voy así:
SELECT name, (name = '-') boolDash, (name = '0') boolZero, (name+0 > 0) boolNum
FROM table
ORDER BY boolDash DESC, boolZero DESC, boolNum DESC, (name+0), name
El resultado debería ser algo:
-
0
1
2
3
4
5
10
13
99
102
Chair
Dog
Table
Windows
La idea general es hacer una verificación simple en SELECCIONAR y clasificar con el resultado.
Solo haz esto:
SELECT * FROM table ORDER BY column `name`+0 ASC
Agregar el +0 significará que:
0, 10, 11, 2, 3, 4
se convierte en:
0, 2, 3, 4, 10, 11
Recuerda que tienes la capacidad de valorar este enunciado .