sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL ignora los guiones al realizar el pedido

Esto se debe a que da_DK.utf8 locale lo define de esta manera. Utilidades de configuración regional de Linux, por ejemplo sort también funcionará así.

Tu convert_to(name, 'latin1') se romperá si encuentra un carácter que no está en el juego de caracteres Latin 1, por ejemplo , por lo que no es una buena solución.

Puede usar order by convert_to(name, 'SQL_ASCII') , que ignorará la ordenación definida por la configuración regional y simplemente usará valores de byte.

Edición de truco feo:

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

Esto ordenará primero cualquier cosa que comience con ASCII que no sea una letra. Esto es muy feo, porque ordenar más en la cadena se comportaría de forma extraña, pero puede ser lo suficientemente bueno para ti.