Ordenar el comportamiento del texto (incluido char
y varchar
así como el text
tipo) depende de la intercalación actual de su localidad.
Consulte las preguntas anteriores estrechamente relacionadas:
- Orden PostgreSQL
- https://stackoverflow.com/q/21006868/398670
Si desea hacer una clasificación simplista por valor ASCII, en lugar de una clasificación correctamente localizada siguiendo las reglas de su idioma local, puede usar el COLLATE
cláusula
select *
from test
order by title COLLATE "C" ASC
o cambiar la intercalación de la base de datos globalmente (requiere volcado y recarga, o reindexación completa). En mi sistema Linux Fedora 19, obtengo los siguientes resultados:
regress=> SHOW lc_collate;
lc_collate
-------------
en_US.UTF-8
(1 row)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title ASC;
title
-------
#
a
#a
a#
a#a
(5 rows)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title COLLATE "C" ASC;
title
-------
#
#a
a
a#
a#a
(5 rows)
PostgreSQL utiliza la compatibilidad de intercalación de su sistema operativo, por lo que es posible que los resultados varíen ligeramente de un sistema operativo host a otro. En particular, al menos algunas versiones de Mac OS X han roto significativamente el manejo de intercalación Unicode.