A partir de lo que te propusieron:
Código sql:
Ver originalSELECT *
FROM tabla
ORDER BY CAST((SUBSTRING_INDEX(SUBSTRING(CodigoInterno, 2), '-', 1)) AS DECIMAL) ASC
solo hace falta que pongas a ver bien el tema de funciones.
Analizalo así:
1. Necesitas que te ordene por zona, por número y luego por subindice.
2. Eso significa que debes fragmentar el dato en tres partes.
3. ¿Qué función te puede devolver sólo el primer caracter de la izquierda? Fácil, existe en todos los DBMS: LEFT(string,size).
4. ¿Qué función puede partir una cadena devolviendo una parte u otra? Ya te la dieron: SUBSTRING_INDEX(str, separador, direccion)
5. ¿Qué función permite convertir una cadena en un número? También te lo dieron: CAST( str AS tipo).
Con esto ya deberías poder resolverlo por ti mismo...
Sería algo así:
Código SQL:
Ver originalSELECT *
FROM `Inventario`
ORDER BY LEFT(CodigoInterno,1),
CAST((SUBSTRING_INDEX(CodigoInterno, '-', 1)) AS DECIMAL),
CAST((SUBSTRING_INDEX(CodigoInterno, '-', -1)) AS DECIMAL);
Esto ordenaría primero por la letra, luego por la area, y luego por codigo.