Para ordenar una columna varchar de PostgreSQL 14 con valores numéricos, estoy usando una intercalación creada por
CREATE COLLATION de_pos (LOCALE = 'de-DE-u-kn-true', PROVIDER = 'icu');` Con tal colación ORDER BY da como resultado un orden correcto como este
1.2.10
1.2.20
1.2.100
Sin esa intercalación especial ORDER BY da como resultado
1.2.10
1.2.100
1.2.20
Quiero saber, ¿qué significa exactamente cada parte de esa definición de colación?
de-DE => configuración regional para alemán-alemania
tu => UTF8 ????
kn => ????
cierto => ????
Consulte Intercalaciones de ICU en la documentación de PostgreSQL. Esto se vincula a la documentación de ICU, que, con cierta indirección, conduce al Identificador de configuración regional Unicode , lo que deja en claro que -u presenta las Extensiones de configuración regional Unicode, y kn es una de esas extensiones. Cuando mire Configuración de intercalación, encontrará que kn configura el orden numérico. La true es la configuración de esa opción (es decir, el orden numérico está activado):
Si se activa , cualquier secuencia de dígitos decimales (General_Category = Nd en [UAX44]) se ordena en un nivel primario con su valor numérico. Por ejemplo, "A-21" < "A-123". Los pesos primarios calculados están todos al comienzo del grupo de reordenación de dígitos . Así, con una tabla UCA no adaptada, "a$" < "a0" < "a2" < "a12" < "a⓪" < "aa".
Esto a veces se denomina "orden de clasificación natural".
En otras palabras, de-DE-u-kn-true es:
de : idioma alemánDE : región Alemaniau : lo que sigue es la Extensión Local de Unicodekn : orden numérico de extensión de configuración regional Unicodetrue : valor de kn , lo que significa que el orden numérico está activadoPuede personalizar el comportamiento de clasificación de su colación especificando nombres de atributos. En este caso, kn-true representa el orden de clasificación natural o el orden de clasificación numérico que clasifica los números según su valor numérico.