PDA

Ver la Versión Completa : Order by ......


chutipascal
24-06-2003, 11:01:37
Tengo un 'petit' problema con el order by,

Cuando hago un:

Order by departamento, familia, codigo

Ordena perfectamente si todos los campos fueran cadenas pero resuta que codigo es integer...y parece que en la ordenación de varios campos quedan moldeados como string.
El resultado es algo como esto

BAR, LICORES, 1
BAR, LICORES, 10
BAR, LICORES, 11
....
BAR, LICORES, 19
BAR, LICORES, 2
.....
Etc...

Cuando realmente quiero ver.
BAR, LICORES, 1
BAR, LICORES, 2
BAR, LICORES, 3
BAR, LICORES, 4
...
BAR, LICORES, 10


He mirado cosas sobre el colation order pero no sago nada en claro, alguna idea?

Un saludo.

kinobi
24-06-2003, 11:23:18
Hola,

cosa rara. Por si las moscas lo he comprobado (en un Firebird 1.0) y obtengo el comportamiento esperado ...


bar licores 1
bar licores 2
bar licores 3
...
bar licores 20


Al principio pensé que te habías "colado" de foro, pero desde luego no es el comportamiento del SQL estándar.

No se me ocurre nada ... ¿tal vez algún caracter oculto en los campos CHAR/VARCHAR? :confused:

Saludos.

chutipascal
24-06-2003, 11:34:47
Retiro lo dicho...............
Ya he encontrado el porque.......
erán dos familias similares licores y licoris

Gracias kinobi, por confirmarme que toca funcionar, me has puesto automaticamente sobre la pista estaba más cerrado que el bolsillo de Eliot Ness.

Ahora me voy directamente a 'pegar' al cliente.

Un saludo.

pedrohdez
24-06-2003, 12:00:10
Y de paso que te invite a unas copichuela!!
:D :D :D

Kafu
24-06-2003, 12:21:41
Pues a mí no me funciona de esa manera, estoy hecho un verdadero lío.
en una tabla con codigo varchar con los valores:

1, 11, 10, 2 el resultado de ordenar por código es

1,
10,
11,
2

Esto es, el primer comportamiento descrito por Chutipascal. Realmente no carece de lógica porque es una comparación alfabética caracter a caracter.

Ahora mismo creo estar usando (tengo un verdadero jaleo con los motores que me he instalado) el motor de Interbase 6.01, no sé si es por eso.

El orden que me interesa
sería el que Kinobi menciona como el normal, o sea el 2 antes que el 10, y además me interesa la A mayúscula antes que la b minúscula, cosa que tampoco me ocurre.

He fisgado muy someramente por la red y he encontrado un link:

http://www.brookstonesystems.com/

que parece que tiene algunas collate de terceros. Aún no me ha dado tiempo a mirarlo bien.

Si sabeis qué debo cambiar para obtener ese comportamiento por favor comentad la jugada. Un saludo,




F.T.G.

__cadetill
24-06-2003, 13:36:54
Posteado originalmente por Kafu
en una tabla con codigo varchar con los valores:


como tu mismo dices, es de tipo VARCHAR, por lo que la ordenación te la esta haciendo bien. En caracteres (no en numeros), el 2 es mayor a 10, 100, 1000000, ......

Para que te lo ordene como tu quieres, deberias (si puedes) pasar el campo a numerico

kinobi
24-06-2003, 13:38:21
Hola,

Posteado originalmente por Kafu
Esto es, el primer comportamiento descrito por Chutipascal. Realmente no carece de lógica porque es una comparación alfabética caracter a caracter.

pero recuerda que en el caso de Chutipascal el código es un entero (la secuencia correcta es: 1, 2, 3, ... 10, ...) y no un VARCHAR como es tu caso (la secuencia correcta es: "1", "10", "2", "3", ...).

Para que un VARCHAR "simule" la ordenación de enteros, es necesario que añadas blancos (o algún otro caracter - siempre el mismo) por la izquierda del VARCHAR.

Saludos.

Kafu
24-06-2003, 14:00:19
pero recuerda que en el caso de Chutipascal el código es un entero

Mis disculpas. En adelante haré uso del viejo truco de leerme bien los mensajes. Por alguna razón he asumido desde el principio que hablabamos de cadenas, justo estaba pensando en el tema de la ordenación y se me han mezclado las ideas.
No me es tan crucial la ordenación de números como el tema de las mayúsculas que creo que sí se podrá solucionar. Un avergonzado saludo,






F.T.G.

kinobi
24-06-2003, 14:46:21
Hola,

Posteado originalmente por Kafu
Un avergonzado saludo,

no te preocupes, en tu mensaje quedaba claro que era un lapsus.

Saludos.