PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL ignora i trattini durante l'ordine

Questo perché da_DK.utf8 locale lo definisce in questo modo. Programmi di utilità per la localizzazione di Linux, ad esempio sort funzionerà anche così.

Il tuo convert_to(name, 'latin1') si interromperà se trova un carattere che non è nel set di caratteri Latin 1, ad esempio , quindi non è una buona soluzione.

Puoi usare order by convert_to(name, 'SQL_ASCII') , che ignorerà l'ordinamento definito dalla locale e utilizzerà semplicemente i valori dei byte.

Brutta modifica dell'hacking:

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

Questo ordinerà prima tutto ciò che inizia con ASCII non lettera. Questo è molto brutto, perché l'ordinamento ulteriormente nella stringa si comporterebbe in modo strano, ma può essere abbastanza buono per te.