Wie man in SQL sortiert und Artikel ignoriert ("the", "a", "an" usw.)

8

Das kommt sehr oft vor, und ich kann sehen, dass es auf StackOverflow für XSLT , Ruby und Drupal , aber ich sehe es nicht speziell für SQL.

Die Frage ist also, wie sortieren Sie Titel richtig, wenn sie mit "The", "A" oder "An" beginnen?

Eine Möglichkeit besteht darin, diese Zeichenfolgen zu trimmen ():

%Vor%

was war vorgeschlagen auf AskMeFi eine Weile zurück (benötigt es LOWER() Funktion?).

Ich weiß, ich habe auch eine Art von Case / Switch-Implementierung von diesem gesehen, aber es ist ein bisschen schwer für Google.

Offensichtlich gibt es eine Reihe von möglichen Lösungen. Was gut wäre, wären SQL-Gurus, die sich auf die Performance auswirken.

    
AmbroseChapel 23.05.2017, 12:09
quelle

6 Antworten

6

Ein Ansatz, den ich gesehen habe, war, zwei Spalten zu haben - eine für die Anzeige und die andere für die Sortierung:

%Vor%

Ich habe keine realen Tests durchgeführt, aber dies hat den Vorteil, dass man einen Index verwenden kann und nicht jedes Mal, wenn man nach der Beschreibung sortiert, eine String-Manipulation erfordert. Wenn Ihre Datenbank keine materialisierten Ansichten unterstützt (was MySQL nicht tut), würde die Implementierung der Logik als berechnete Spalte in einer Ansicht keinen Vorteil bringen, da Sie die berechnete Spalte nicht indizieren können.

    
OMG Ponies 15.07.2010 05:08
quelle
2

Ich benutze das seit Jahren, kann mich aber nicht mehr erinnern, wo ich es gefunden habe:

%Vor%

Nachgeben:

%Vor%     
GDP 24.06.2015 19:15
quelle
0

Ich kann nur für SQL Server sprechen: Sie verwenden LTRIM innerhalb von CASE-Anweisungen. Es ist keine LOWER-Funktion erforderlich, da die Auswahl standardmäßig nicht zwischen Groß- und Kleinschreibung unterscheidet. Wenn Sie jedoch Artikel ignorieren möchten, würde ich vorschlagen, dass Sie ein Geräuschwörterbuch verwenden und einen Volltextindikationskatalog einrichten. Ich bin unsicher, ob andere Implementierungen SQL unterstützen.

    
CarneyCode 15.07.2010 05:10
quelle
0

Speziell für Postgres können Sie regexp_replace verwenden, um die Arbeit für Sie zu erledigen:

%Vor%     
Grant 23.10.2017 21:04
quelle
-1

LOWER wird benötigt. Während SELECT nicht zwischen Groß- und Kleinschreibung unterscheidet, ist ORDER BY .

    
JBC 12.09.2011 18:51
quelle
-3

Versuchen Sie Folgendes:

ORDER BY ersetzen (ersetzen (ersetzen (YOURCOLUMN, 'THE', ''), 'a \' ',' '),' an ',' ')

Nicht getestet!

    
Karim 14.06.2013 09:23
quelle