miércoles, 28 de enero de 2009

Ordenar número de tipo String (CHAPUZA)

Ya estamos terminando la pequeña aplicación de inventario de activos en la que llevo metido los dos últimos meses. Y me he encontrado con un problema de compleja resolución que al final he resuelto con una enorme CHAPUZA.

Tengo un campo identificador de nivel que es un string y que es numérico con decimales del 0 al 10. Algo como:

1
2
3
3.4
5
7
10
10.1

El problema es que cuando lo recupero de la base de datos y lo cargo en un grid ordenado por este campo, el 10 se me pone justo detrás del 1, seguido de 10.1.

La primera solución, conviértelo en un número, no funciona porque el IIS está en un equipo en castellano y la BD en un equipo en ingles. O sea, que me tengo que liar a cambiar las Culture y si la combinación no es la que yo quiero, entonces todo casca. Y cómo se acaba la cosa en dos días, no me he molestado en buscar cómo recuperar el idioma del IIS y del SQL.

La segunda, ponerle ceros por delante, me ha provocado empezar a escribir código y no hacer que funcionará del todo bien. Y eso que esta creo que es la solución correcta.

Y volviendo de comer, he dado con una solución que es una CHAPUZA pero funciona muy bien en este caso específico con unta tabla que prácticamente no va a cambiar este campo nunca.

Le he puesto un espacio delante de todos los números a excepción de los que superan la decena. Y al cero le he puesto dos espacios… y yá tá. (jeje, sí que funciona perfectamente en TODO).

2 comentarios:

festuc dijo...

Quizas es un poco tarde pero para quien lo busque i vea este post aqui va una solución:

Iniciado por MySQL
Another way of sorting a field containing both text and numbers such as this:

+------+
| code |
+------+
| A10 |
| A20 |
| A5 |
| A6 |
| A7 |
| A8 |
| A9 |
+------+


You can query like this:
mysql> select * from table order by length(code), code;

+------+
| code |
+------+
| A5 |
| A6 |
| A7 |
| A8 |
| A9 |
| A10 |
| A20 |
+------+

Posted by Roberto Eduardo Decurnex Gorosito on June 19 2007 6:41am

Espero que us serveixi! Salut!

Juan Quijano dijo...

Muchas gracias... es aún más feo que el mio!!