Wählen Sie etwas, das hat mehr/weniger als x Zeichen
Frage mich, ob es möglich ist, wählen Sie etwas, das hat mehr/weniger als x Zeichen in SQL.
Zum Beispiel, ich habe eine Mitarbeiter-Tabelle und ich will zeigen, alle Namen der Mitarbeiter, die mehr als 4 Buchstaben in Ihrem Namen.
Hier ist eine Beispiel-Tabelle
ID EmpName Dept
1 Johnny ACC
2 Dan IT
3 Amriel PR
4 Amy HR
InformationsquelleAutor der Frage MNX1024 | 2011-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie SQL Server verwenden, Verwenden Sie die
LEN
(Länge) - Funktion:MSDN heißt es:
Hier ist der link zur MSDN
Für oracle/plsql, die Sie verwenden können
Length()
mysql verwendet auch die Länge.Hier ist die Oracle-Dokumentation:
http://www.techonthenet.com/oracle/functions/length.php
Und hier ist die mySQL-Dokumentation von
Length(string)
:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_length
For PostgreSQL verwenden, können Sie
length(string)
oderchar_length(string)
. Hier ist die PostgreSQL-Dokumentation:http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-SQL
InformationsquelleAutor der Antwort JonH
JonH abgedeckt hat, sehr gut das Teil, auf das schreiben der Abfrage. Es ist ein weiteres wichtiges Problem, das erwähnt werden muss allerdings auch, die ist der performance-Merkmale für eine solche Abfrage. Wiederholen wir es hier (angepasst Oracle):
Diese Abfrage ist die Einschränkung der Ergebnis einer Funktion auf eine Spalte angewendet Wert (das Ergebnis der Anwendung der
LENGTH
- Funktion, um dieEmployeeName
Spalte). In Oracle, und wahrscheinlich auch in allen anderen RDBMS bedeutet dies, dass Sie einen normalen index auf EmployeeName wird nutzlos sein, die Antwort auf diese Abfrage; die Datenbank wird ein full table scan, die werden wirklich teuer.Jedoch die verschiedenen Datenbanken bieten eine Funktion Indizes feature, das entworfen ist, um Abfragen zu beschleunigen, wie diese. Zum Beispiel in Oracle, können Sie einen index erstellen, wie diese:
Mag das immer noch nicht helfen, in Ihrem Fall jedoch, da der index nicht sehr selektiv für Ihren Zustand. Damit meine ich das folgende: Fragen Sie nach Reihen, in denen der name, die Länge ist mehr als 4. Lassen Sie uns davon ausgehen, dass 80% der Namen der Mitarbeiter in dieser Tabelle werden mehr als 4. Gut, dann ist die Datenbank wird wahrscheinlich zu dem Schluss (zu Recht), dass es nicht Wert mit dem index, weil es wahrscheinlich gelesen haben, die meisten der Blöcke in der Tabelle sowieso.
Allerdings, wenn Sie änderungen an der Abfrage zu sagen
LENGTH(EmployeeName) <= 4
oderLENGTH(EmployeeName) > 35
unter der Annahme, dass nur sehr wenige Mitarbeiter haben Namen, die mit weniger als 5 Zeichen oder mehr als 35, dann ist der index ausgesucht werden würde und die Leistung zu verbessern.Sowieso, kurz gesagt: hüten Sie sich vor der Leistungsmerkmale Abfragen wie die, die Sie versuchen zu schreiben.
InformationsquelleAutor der Antwort Luis Casillas
Heute habe ich versucht, dasselbe in db2 und unten verwendet, in meinem Fall hatte ich Leerzeichen am Ende von varchar-Spalte Daten
InformationsquelleAutor der Antwort Vipin