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

ordenar por codigo extraño

Estas en el tema de ordenar por codigo extraño en el foro de Mysql en Foros del Web. Hola! Esta es mi primera busqueda de ayuda asi que espero expresar bien lo que quiero hacer. Hace poco que entre a programar en mi ...
  #1 (permalink)  
Antiguo 30/04/2008, 01:53
 
Fecha de Ingreso: abril-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Pregunta ordenar por codigo extraño

Hola!

Esta es mi primera busqueda de ayuda asi que espero expresar bien lo que quiero hacer. Hace poco que entre a programar en mi empresa y la base de datos ya me la he encontrado asi...yo no hubiera hecho asi esto pero en fin, ahora me toca enfrentarme a este problema...a ver si me podeis ayudar

El asunto es que tengo en una tabla de proyectos un campo con el "codigo del proyecto" que es de tipo varchar. El string que contiene tiene el siguiente formato:

AA-BB-CCDD

Donde AA son dos caracteres que indican el departamento, BB son dos cifras para el año, CC son dos caracteres que indican una provincia y DD son dos cifras que indican el numero del proyecto dentro del año para ese departamento.

Os pongo un ejemplo para que se me haga más facil explicar lo que me piden:
Si en la tabla tengo estos 3 codigos (por orden de insercion)

HI-07-BU02
HI-06-SE05
HI-07-AB04

Y los ordeno con un ORDER BY me los deja asi:

1) HI-06-SE07
2) HI-07-AB04
3) HI-07-BU02

Que estarian ordenados por departamento (HI) y por año (06, 07)


LA cuestion es que debo ordenarlos por departamento (HI), por año (06,07) Y por numero del proyecto, es decir, que quede asi:

1) HI-06-SE07
2) HI-07-BU02
3) HI-07-AB04

Llevo varios dias dandole vueltas al asunto y es que esas dichosas letras del medio son las que fastidian todo el asunto, pero es la codificacion de la empresa y poco puedo hacer con eso...

En fin si alguien me pudiera ayudar le estaria MUUUUY agradecido

De todas formas si habeis llegado hasta aqui leyendo ya te doy las gracias jejeje que vaya rollo os he soltao
  #2 (permalink)  
Antiguo 30/04/2008, 06:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: ordenar por codigo extraño

Ahora no puedo ver si funciona, luego lo intento pero creo que puedes hacer lo siguiente


Código:
Select codigo,...
From tabla
...
order by substr(codigo,0,2),
              substr(codigo,3,2),
              substr(codigo,8,2);
tampoco se si es substr la funcion, ni si los caracteres se empiezan a contar des de 0 o de 1, pero seguro que existe una funcion que saque un substring de un campo string.

Luego te lo confirmo....

Quim
  #3 (permalink)  
Antiguo 30/04/2008, 08:13
 
Fecha de Ingreso: abril-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Re: ordenar por codigo extraño

Caray que bueno y que rápido!!

Ya lo he probado y efectivamente funciona , muchiiiisimas gracias Quim

Puede usarse tanto substr() como substring() y lo que si es que empiezan a contar desde 1.

Lo dicho, muchísimas gracias por la ayuda
  #4 (permalink)  
Antiguo 30/04/2008, 08:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: ordenar por codigo extraño

A título de ampliación y por si sirve para otras cosas, quisiera recordar que también podría hacerse así:
... ORDER BY SUBSTRING_INDEX( codigo, '-', 1 ) , SUBSTRING_INDEX( SUBSTRING_INDEX( codigo, '-', 2 ) , '-', -1 ) , SUBSTRING_INDEX( codigo, '-', -1 )
Esta solución sería interesante si el número de caracteres entre los guiones pudiera variar, es decir, si tanto en el primer miembro como en el tercero pudieran encontrarse más o menos de 2 y 4 caracteres. Lo que hace es separar por un limitador, en tu caso el guión, con el que delimitas las tres partes. La mayor dificultad es hacer que salga el de en medio, para lo que hay que recurrir a dos SUBSTRING_INDEX.
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 11:31.