PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Alphanumerische Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung in Postgres

My PostgreSQL sortiert nach Ihren Wünschen. Die Art und Weise, wie PostgreSQL Zeichenfolgen vergleicht, wird durch Gebietsschema und Sortierung bestimmt. Wenn Sie eine Datenbank mit createdb erstellen da ist -l Option zum Festlegen des Gebietsschemas. Sie können auch überprüfen, wie es in Ihrer Umgebung konfiguriert ist, indem Sie psql -l verwenden :

[[email protected]]$ psql -l
List of databases
 Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
---------+----------+----------+------------+------------+-----------------------
 mn_test | postgres | UTF8     | pl_PL.UTF8 | pl_PL.UTF8 |

Wie Sie sehen, verwendet meine Datenbank die polnische Sortierung.

Wenn Sie eine Datenbank mit einer anderen Sortierung erstellt haben, können Sie eine andere Sortierung in der Abfrage verwenden, genau wie:

SELECT * FROM sort_test ORDER BY name COLLATE "C";
SELECT * FROM sort_test ORDER BY name COLLATE "default";
SELECT * FROM sort_test ORDER BY name COLLATE "pl_PL";

Sie können verfügbare Sortierungen auflisten nach:

SELECT * FROM pg_collation;

BEARBEITET:

Oh, ich habe übersehen, dass 'a11' vor 'a2' stehen muss.

Ich glaube nicht, dass die Standardsortierung die alphanumerische Sortierung lösen kann. Für eine solche Sortierung müssen Sie die Zeichenfolge genau wie in der Antwort von Clodoaldo Neto in Teile aufteilen. Eine weitere nützliche Option, wenn Sie häufig auf diese Weise bestellen müssen, ist die Aufteilung des Namensfeldes in zwei Spalten. Sie können Trigger auf INSERT und UPDATE erstellen, die name teilen in name_1 und name_2 und dann:

SELECT name FROM sort_test ORDER BY name_1 COLLATE "en_EN", name_2;

(Ich habe die Sortierung vom Polnischen ins Englische geändert, Sie sollten Ihre native Sortierung verwenden, um Buchstaben wie aącć usw. zu sortieren)