Estoy tratando de replicar los resultados de clasificación de PostgreSQL con fines de prueba.
Suponga que tiene una tabla temp con un solo name de columna que contiene las siguientes líneas:
dolores et dolor nemo abc zxcAhora ejecuta la siguiente consulta:
SELECT * from temp ORDER BY name ASCEl resultado ordenado es:
abc dolores et dolor nemo zxcSin embargo, la implementación predeterminada para ordenar en lenguajes de programación lo devolverá de manera diferente:
abc dolor nemo dolores et zxcEn JavaScript:
["dolores et", "dolor nemo", 'abc' , 'zxc'].sort() // returns ["abc", "dolor nemo", "dolores et", "zxc"]Me preguntaba si hay una manera fácil de replicar el resultado de clasificación de la base de datos en JavaScript (estoy usando NodeJS), para poder verificarlo en mis pruebas. Creo que me estoy perdiendo algo muy simple aquí. Cualquier ayuda es apreciada.
Podría intentar usar una función como esta para forzar el orden en PostgreSQL, pero no quiero eso. Mi objetivo es replicar el comportamiento predeterminado en JavaScript.
La clasificación de cadenas siempre se realiza mediante una determinada colación . Si no está consciente de usar una intercalación en su lenguaje de programación, probablemente esté usando la intercalación POSIX , que compara cadenas carácter por carácter según su punto de código (el valor numérico en la codificación).
En PostgreSQL, eso se vería así:
ORDER BY name COLLATE "POSIX";Entonces, para resolver su problema, tendría que averiguar la intercalación de la columna.
Si no se especifica una intercalación especial en la definición de la columna, utilizará la intercalación de la base de datos, que se puede encontrar con
SELECT datcollate FROM pg_database WHERE datname = 'my_database';Esa será una recopilación del sistema operativo de la biblioteca C.
Entonces, todo lo que tiene que hacer es usar esa intercalación en su programa.
Si su programa está escrito en C, puede usar directamente la biblioteca C. De lo contrario, consulte la documentación de su lenguaje de programación.