Duda de ordenacion SQL

04/08/2008 - 18:35 por Vicente Flich | Informe spam
Buenas tardes,

Para simplificar mi duda, he creado una base de datos (PRUEBA) con una unica
tabla (llamada TABLA) y esta tabla solo contiene un campo (CODIGO, nchar(10)).

La tabla tiene como collation Traditional_Spanish_CI_AS, es decir, case
insentsitive y ordenacion Spanish (aunque he probado inclusi en English y
pasa lo mismo).

En la tabla meto los siguientes registros:

CODIGO
-
+
A+
A-
A+A
A-A

y ahora hago un SELECT * FROM TABLA ORDER BY CODIGO

Resulta que me da esta ordenacion:

-
+
A-
A+
A+A
A-A

Primero, me llama la atencion que en los 4 primeros registros ordena el -
antes que el + (cuando en la tabla ascii y tambien tambien en la pagina de
codigos 1252, el caracter + (ascii 43) va antes que el - (ascii 45).

Bueno, puedo aceptar que el collation ordene diferente lexicograficamente...
pero entonces no entiendo porque pone A+A antes que A-A.

¿Alguien puede aclararme esto? Me he dado cuenta de esto porque en una
aplicacion desarrollada en C++, al ordenar con el collate (con la funcion
strcoll()) el criterio es distinto... pero bueno, lo del C++ ya es esta fuera
del tema de esta news.

Gracias,

Vicente Flich
 

Leer las respuestas

#1 Alejandro Mesa
04/08/2008 - 22:10 | Informe spam
Vicente Flich,

Quizas estes interesado en usar una collation binaria como es
Traditional_Spanish_BIN2.


AMB


"Vicente Flich" wrote:

Buenas tardes,

Para simplificar mi duda, he creado una base de datos (PRUEBA) con una unica
tabla (llamada TABLA) y esta tabla solo contiene un campo (CODIGO, nchar(10)).

La tabla tiene como collation Traditional_Spanish_CI_AS, es decir, case
insentsitive y ordenacion Spanish (aunque he probado inclusi en English y
pasa lo mismo).

En la tabla meto los siguientes registros:

CODIGO
-
+
A+
A-
A+A
A-A

y ahora hago un SELECT * FROM TABLA ORDER BY CODIGO

Resulta que me da esta ordenacion:

-
+
A-
A+
A+A
A-A

Primero, me llama la atencion que en los 4 primeros registros ordena el -
antes que el + (cuando en la tabla ascii y tambien tambien en la pagina de
codigos 1252, el caracter + (ascii 43) va antes que el - (ascii 45).

Bueno, puedo aceptar que el collation ordene diferente lexicograficamente...
pero entonces no entiendo porque pone A+A antes que A-A.

¿Alguien puede aclararme esto? Me he dado cuenta de esto porque en una
aplicacion desarrollada en C++, al ordenar con el collate (con la funcion
strcoll()) el criterio es distinto... pero bueno, lo del C++ ya es esta fuera
del tema de esta news.

Gracias,

Vicente Flich

Preguntas similares