PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL ignore les tirets lors de la commande

C'est parce que da_DK.utf8 locale le définit de cette façon. Utilitaires compatibles avec les paramètres régionaux Linux, par exemple sort fonctionnera également comme ceci.

Votre convert_to(name, 'latin1') se cassera s'il trouve un caractère qui n'est pas dans le jeu de caractères Latin 1, par exemple , ce n'est donc pas une bonne solution de contournement.

Vous pouvez utiliser order by convert_to(name, 'SQL_ASCII') , qui ignorera le tri défini par les paramètres régionaux et utilisera simplement des valeurs d'octets.

Modification de piratage moche :

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

Cela triera d'abord tout ce qui commence par une non-lettre ASCII. C'est très moche, car trier plus loin dans la chaîne se comporterait étrangement, mais cela peut être assez bon pour vous.