Postgresql sortiert gemischte alphanumerische Daten

8

Ausführen dieser Abfrage:

%Vor%

gibt diese Ergebnisse zurück:

%Vor%

Aber ich habe erwartet:

%Vor%

Was ist hier falsch?

    
el_quick 10.08.2011, 22:21
quelle

6 Antworten

4

Sie können möglicherweise manuell sortieren, indem Sie den Text aufteilen, falls Zahlen folgen:

%Vor%

Dies sortiert den Spaltentext zuerst nach allen Zeichen, wobei optional ein End-Leerzeichen gefolgt von Ziffern gefolgt von diesen optionalen Ziffern ausgeschlossen wird.

Hat in meinem Test gut funktioniert.

Update hat die reine String-Sortierung mit einer einfachen Koaleszenz (duh) behoben.

    
OverZealous 10.08.2011, 23:04
quelle
16

Sie können die name -Spalte einfach in den bytea -Datentyp umwandeln kollation-agnostische Reihenfolge:

%Vor%

Ergebnis:

%Vor%     
Grzegorz Szpetkowski 10.08.2011 23:17
quelle
2

OverZealous Antwort hat mir geholfen, aber hat nicht funktioniert, wenn die Zeichenfolge in der Datenbank mit Zahlen gefolgt von zusätzlichen Zeichen begann.

Folgendes funktionierte für mich:

%Vor%

Also dieser:

  1. Extrahiert die erste Zahl in der Zeichenfolge oder verwendet 99999999.
  2. Extrahiert die Zeichenfolge, die der möglichen ersten Nummer folgt.
  3. Extrahiert eine abschließende Zahl oder verwendet 0.
Tor Olsson 28.02.2012 13:33
quelle
2

Bei all diesen Methoden wurde meine Auswahl in alphabetischer Reihenfolge sortiert:

%Vor%

Diese Lösung funktionierte für mich (lc_collate: 'ru_RU.UTF8'):

%Vor%     
A Vlk 04.09.2015 06:49
quelle
0

Tors letzte SQL funktionierte für mich. Allerdings, wenn Sie diesen Code von PHP aufrufen, müssen Sie zusätzliche Schrägstriche hinzufügen.

%Vor%     
no1uknow 11.03.2014 16:47
quelle
0

Die obige Antwort von Vlk hat mir sehr geholfen, aber es hat nur nach dem numerischen Teil sortiert, was in meinem Fall an zweiter Stelle lag. Meine Daten waren wie (Schreibtisch 1, Schreibtisch 2, Schreibtisch 3 ...) ein Stringteil, ein Leerzeichen und ein numerischer Teil. Die Syntax in der Antwort von A Vlk gab die Daten nach der Nummer sortiert wieder, und das war die einzige Antwort von oben. Wenn jedoch der Stringteil anders war (zB Tisch 3, Tisch 4, Tisch 1, Tisch 5 ...), würde Tabelle 1 zuerst von Tisch 2 kommen. Ich reparierte dies mit der folgenden Syntax:

%Vor%     
oupoup 17.10.2017 15:16
quelle