PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL ignoriert Bindestriche beim Sortieren

Das liegt daran, dass da_DK.utf8 locale definiert es so. Linux-Locale-unterstützende Dienstprogramme, zum Beispiel sort wird auch so funktionieren.

Ihr convert_to(name, 'latin1') bricht ab, wenn es ein Zeichen findet, das nicht im Zeichensatz von Latin 1 ist, zum Beispiel , also ist es keine gute Problemumgehung.

Sie können order by convert_to(name, 'SQL_ASCII') verwenden , das die vom Gebietsschema definierte Sortierung ignoriert und einfach Bytewerte verwendet.

Hässliche Hackbearbeitung:

order by
  (
    ascii(name) between ascii('a') and ascii('z')
    or ascii(name) between ascii('A') and ascii('Z')
    or ascii(name)>127
  ),
  name;

Dadurch wird zuerst alles sortiert, was mit einem ASCII-Nichtbuchstaben beginnt. Das ist sehr hässlich, denn eine weitere Sortierung in Strings würde sich seltsam verhalten, aber es kann gut genug für Sie sein.