2017-11-18 4 views
1

Ich muss eine Abfrage schreiben, sortieren (Reihenfolge von) meine Benutzernamen in einer Weise, wo es mit einem bestimmten Buchstaben kommt Priorität (innerhalb des Namens). Zum Beispiel, wenn ich Benutzer Zitrone, Loger, Alan, Avon, Bland, Cavin, Clauge dann sollte meine Abfrage diesen in folgenden Reihenfolge zurück:PGSQL Abfrage nach mit einem bestimmten Buchstaben in jedem Benutzernamen

  • Lemon
  • Loger
  • Alan
  • Bland
  • Clauge
  • Avon
  • Cavin
d.h.

„L“ Schreiben sollte

Antwort

1

in Sortier Priorität sein können Sie die position Funktion verwenden, um die Position des l, zu extrahieren und zu sortieren, um das nach. Es gibt jedoch zwei Einschränkungen im Auge zu behalten:

  1. position ist case-sensitive, so würden Sie explizit mit Fällen zu tun haben (beispielsweise durch Kleinschreibung der Zeichenfolge durchsuchen).
  2. Wenn der Teil die Sie suchen (l, in diesem Fall) nicht in der Zeichenfolge ist, wird position0 zurückkehren, so dass Sie explizit mit 0 zu tun haben werden, damit Namen ohne Ls kommen zuerst statt zuletzt:


SELECT name 
FROM  mytable 
ORDER BY CASE POSITION('l' IN LOWER(name)) 
       WHEN 0 THEN NULL 
       ELSE POSITION('l' IN LOWER(name)) 
     END ASC NULLS LAST, 
     name 
+1

Ok das ist eine ziemlich coole Lösung: O –

+0

Dank @mureinik. Die angegebene Abfrage funktioniert gut für mich. :) –

Verwandte Themen