Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ordenar campo alfanumerico

Estas en el tema de Ordenar campo alfanumerico en el foro de Mysql en Foros del Web. Buenos días, Tengo un inconveniente al ordenar un campo alfanumérico de una consulta mysql: El ORDER BY es este: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 25/05/2012, 08:48
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Pregunta Ordenar campo alfanumerico

Buenos días,

Tengo un inconveniente al ordenar un campo alfanumérico de una consulta mysql:

El ORDER BY es este:

Código MySQL:
Ver original
  1.     i.id_indicador_interno,
  2.     i.id_indicador

y lo que me retorna es:

Código MySQL:
Ver original
  1. id_indicador    id_indicador_interno
  2.        50   EN1
  3.        59   EN10
  4.        60   EN11
  5.        61   EN12
  6.        ...
  7.        68   EN19
  8.        51   EN2

pero yo necesito que me retorne
EN1, EN2, ...

Espero que alguien me pueda ayudar.

Gracias
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #2 (permalink)  
Antiguo 25/05/2012, 09:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ordenar campo alfanumerico

Primero debes decirnos si ese prefijo EN siempre es el mismo o hay otros caracteres y qué tamaño tienen. Te lo digo porque lo mismo necesitamos ordenar por doble criterio, primero por el prefijo en modo alfabético y luego por el resto en modo numérico.
Te anticipo que tendremos que separar esa cadena y en el order by establecer dos parámetros uno alfabético de dos caracteres
y luego otro numérico mediante CAST(SUBSTRING_INDEX(id_indicador_interno, "EN",1) AS UNSIGNED)

no lo he probado, pero a ver si así:
Código MySQL:
Ver original
  1. ORDER BY LEFT(id_indicador_interno,2),
  2. CAST(SUBSTRING_INDEX(nombrecampo, "EN",1) AS UNSIGNED)

De todas maneras, necesitamos saber si el prefijo puede ser distinto y si además puede tener menos número de caracteres o más.
  #3 (permalink)  
Antiguo 29/05/2012, 07:32
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Ordenar campo alfanumerico

Hola Jurena, que pena no haber dado respuesta antes... lo que sucede es que estaba ausente,
Primero, el sufigo cambia en 7 categorías predefinidas, pero si el usuario define una más, también debería tomar los cambios.
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #4 (permalink)  
Antiguo 29/05/2012, 07:42
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Ordenar campo alfanumerico

Cita:
Iniciado por jurena Ver Mensaje
Primero debes decirnos si ese prefijo EN siempre es el mismo o hay otros caracteres y qué tamaño tienen. Te lo digo porque lo mismo necesitamos ordenar por doble criterio, primero por el prefijo en modo alfabético y luego por el resto en modo numérico.
Te anticipo que tendremos que separar esa cadena y en el order by establecer dos parámetros uno alfabético de dos caracteres
y luego otro numérico mediante CAST(SUBSTRING_INDEX(id_indicador_interno, "EN",1) AS UNSIGNED)

no lo he probado, pero a ver si así:
Código MySQL:
Ver original
  1. ORDER BY LEFT(id_indicador_interno,2),
  2. CAST(SUBSTRING_INDEX(nombrecampo, "EN",1) AS UNSIGNED)

De todas maneras, necesitamos saber si el prefijo puede ser distinto y si además puede tener menos número de caracteres o más.
De todas formas probé tu solución y me funcionó con todos, sólo le quité el EN y dejé el espacio en blanco, así:

Código MySQL:
Ver original
  1. ORDER BY LEFT(id_indicador_interno,2),
  2. CAST(SUBSTRING_INDEX(id_indicador_interno, '',1) AS UNSIGNED)

muchas gracias

__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175

Etiquetas: alfanumerico, sql, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.