Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   ordenar por codigo extraño (http://www.forosdelweb.com/f86/ordenar-por-codigo-extrano-581433/)

kikovin 30/04/2008 01:53

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 :Zzz:

quimfv 30/04/2008 06:57

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

kikovin 30/04/2008 08:13

Re: ordenar por codigo extraño
 
Caray que bueno y que rápido!!

Ya lo he probado y efectivamente funciona :aplauso: :aplauso:, 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 :aplauso:

jurena 30/04/2008 08:20

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.


La zona horaria es GMT -6. Ahora son las 02:20.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.