sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL při objednávání ignoruje pomlčky

Důvodem je da_DK.utf8 locale to definuje tímto způsobem. Pomůcky pro místní nastavení Linuxu, například sort bude také fungovat takto.

Váš convert_to(name, 'latin1') přeruší, pokud najde znak, který není ve znakové sadě Latin 1, například , takže to není dobré řešení.

Můžete použít order by convert_to(name, 'SQL_ASCII') , který bude ignorovat třídění definované národním prostředím a jednoduše použije bajtové hodnoty.

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;

Tím se nejprve seřadí vše, co začíná na ASCII bez písmene. To je velmi ošklivé, protože další řazení v řetězci by se chovalo divně, ale může vám to stačit.



  1. Kolik znaků můžete uložit do 1 bajtu?

  2. Kontrola syntaxe PostgreSQL bez spuštění dotazu

  3. PostgreSQL porovná dva objekty jsonb

  4. Exportujte data SQL do .csv a generujte samostatné soubory .csv pro každou tabulku na základě dotazu