sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL onjuiste sortering

Sorteergedrag voor tekst (inclusief char en varchar evenals de text type) is afhankelijk van de huidige sortering van uw land.

Zie eerdere nauw verwante vragen:

  • PostgreSQL-sortering
  • https://stackoverflow.com/q/21006868/398670

Als u een simplistische sortering op ASCII-waarde wilt uitvoeren in plaats van een correct gelokaliseerde sortering volgens uw lokale taalregels, kunt u de COLLATE gebruiken clausule

select * 
from test
order by title COLLATE "C" ASC

of verander de databasesortering globaal (vereist dump en herladen, of volledige herindexering). Op mijn Fedora 19 Linux-systeem krijg ik de volgende resultaten:

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 gebruikt de sorteerondersteuning van uw besturingssysteem, dus het is mogelijk dat de resultaten enigszins verschillen van host-besturingssysteem tot host-besturingssysteem. In het bijzonder hebben ten minste sommige versies van Mac OS X de verwerking van unicode-sortering aanzienlijk verbroken.



  1. Importeer psycopg2-bibliotheek niet geladen:libssl.1.0.0.dylib

  2. MySQL – Wacht enkele seconden met SELECT SLEEP()

  3. SQL-groepering op maand en jaar

  4. Opgeslagen Java-procedure versus PL/SQL-opgeslagen procedure