[Pgsql-ayuda] Duda con el Order by...

Victor Chavez vchavezp@yahoo.com
Thu, 20 Nov 2003 08:07:52 -0600 (CST)


Gracias por la respuesta...

Tuve que reiniciar el entorno de la base de datos con 
initdb --lc-collate=C y ahora los registros se ordenan
de acuerdo a lo que esperaba.  Hice que se creara un
archivo llamado lista.txt con  el resultado de la
consulta y lo abrí y ordene con el Calc del
OpenOffice, con excel e incluso le hice un cat
lista.txt | sort desde la linea de comandos del linux,
y en todos los casos los registros se  ordenaron
tomando en cuenta el espacio en blanco y colocando al
final los demas registros.

Quiza el modo en el que el postgres ordenaba los
registros es correcto, pero al entregar consultas y
reportes a los usuarios tenia que coincidir con lo que
se obtiene de otros medios. Por lo de los acentos y
las  eñes, al menos en mi caso, los campos que se
ordenan tienen caracteres en mayusculas y las eñes no
son determinantes, pero no se como afectaria en otros
casos.


Gracias de nuevo.

Victor Chavez
Merida,Yuc.,Mexico


 --- Alvaro Herrera Munoz <alvherre@dcc.uchile.cl>
escribió: > On Wed, Nov 19, 2003 at 06:21:55PM -0600,
Victor
> Chavez wrote:
> 
> > No entiendo la razon por la cual el espacio que
> existe
> > despues de la cadena 'JUAN' no es tomado en cuenta
> > para ordenar los registros pues como puede
> observarse
> > en los registros que he marcado con *, la
> ordenacion
> > se realiz? como si los otros registros que no
> tienen
> > el asterisco no tuvieran ese espacio en blanco...
> 
> > Hay algun modo de indicar el tipo de ordenacion o
> cual
> > puede ser la explicacion de esto, pues otras
> > herramientas como las hojas de calculo por
> ejemplo,
> > primero ordenan los registros con el espacio y
> luego
> > los demas en orden del alfabeto...
> 
> Evidentemente quien hizo las otras herramientas no
> tenia mucha idea
> sobre las reglas idiomaticas para ordenar cadenas de
> caracteres.  El
> ordenamiento que ves, descartando espacios en
> blanco, es el correcto.
> (No se quien es la autoridad al respecto, pero así
> es).
> 
> Si reinicializas (initdb?) la base de datos con
> lc_collate=C deberías
> obtener el resultado que deseas, pero sospecho que
> vas a tener efectos
> secundarios indeseables (no va a ordenar
> correctamente acentos o ñ).
> 
> Una alternativa, si el problema te preocupa mucho,
> es que prepares un
> locale propio que considere el ordenamiento que a ti
> te interesa.  Pero
> es una tarea ardua y francamente no te lo recomiendo
> en absoluto.
> 
> Otra alternativa podría ser algo como
> 
> select
> nombre
> from test
> where nombre like 'JUAN%'
> order by substring(nombre from length('JUAN%') for
> 1), nombre;
> 
> pero es horrible.  Aunque quizás encapsulado en una
> función no sea tan
> grave ...
> 
> -- 
> Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
> FOO MANE PADME HUM 

_________________________________________________________
Do You Yahoo!?
La mejor conexión a internet y 25MB extra a tu correo por $100 al mes. http://net.yahoo.com.mx