sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL ignorerar bindestreck vid beställning

Detta beror på att da_DK.utf8 locale definierar det så här. Linux-lokalmedvetna verktyg, till exempel sort kommer också att fungera så här.

Din convert_to(name, 'latin1') kommer att gå sönder om den hittar ett tecken som inte är på latin 1 teckenuppsättning, till exempel , så det är ingen bra lösning.

Du kan använda order by convert_to(name, 'SQL_ASCII') , som kommer att ignorera lokaldefinierad sortering och helt enkelt använda bytevärden.

Ugly hack edit:

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

Detta kommer först att sortera allt som börjar med ASCII icke-bokstav. Det här är väldigt fult, för att sortera längre i sträng skulle bete sig konstigt, men det kan vara tillräckligt bra för dig.



  1. postgresql - fråga för att bygga upp json

  2. Hur uppdaterar man ett kolumnvärde med det aktuella kolumnvärdet plus ett steg i kodantändaren?

  3. Hibernate och Oracle Sequence

  4. Hur kan jag snabba upp denna SELECT CONCAT/GROUP BY-fråga?