Ich habe mich gefragt, ob es möglich ist, etwas auszuwählen, das mehr oder weniger als x Zeichen in SQL enthält.
Ich habe beispielsweise eine Mitarbeitertabelle und möchte alle Mitarbeiternamen anzeigen, deren Name mehr als 4 Zeichen enthält.
Hier ist eine Beispieltabelle
ID EmpName Dept
1 Johnny ACC
2 Dan IT
3 Amriel PR
4 Amy HR
AND
Anweisung hinzu, z. B.SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
JonH hat den Teil zum Schreiben der Abfrage sehr gut behandelt. Es gibt jedoch noch ein weiteres wichtiges Problem, das erwähnt werden muss, nämlich die Leistungsmerkmale einer solchen Abfrage. Wiederholen wir es hier (angepasst an Oracle):
Diese Abfrage beschränkt das Ergebnis einer Funktion, die auf einen Spaltenwert angewendet wird (das Ergebnis der Anwendung der
LENGTH
Funktion auf dieEmployeeName
Spalte). In Oracle und wahrscheinlich in allen anderen RDBMS bedeutet dies, dass ein regulärer Index für EmployeeName für die Beantwortung dieser Abfrage unbrauchbar ist. Die Datenbank führt einen vollständigen Tabellenscan durch, was sehr kostspielig sein kann.Verschiedene Datenbanken bieten jedoch eine Funktion für Funktionsindizes, mit der solche Abfragen beschleunigt werden sollen. In Oracle können Sie beispielsweise einen Index wie den folgenden erstellen:
Dies kann in Ihrem Fall jedoch immer noch nicht hilfreich sein, da der Index für Ihre Erkrankung möglicherweise nicht sehr selektiv ist. Damit meine ich Folgendes: Sie fragen nach Zeilen, in denen der Name länger als 4 ist. Nehmen wir an, dass 80% der Mitarbeiternamen in dieser Tabelle länger als 4 sind. Nun, dann wird die Datenbank wahrscheinlich geschlossen ( richtig), dass es sich nicht lohnt, den Index zu verwenden, da er wahrscheinlich sowieso die meisten Blöcke in der Tabelle lesen muss.
Wenn Sie jedoch die Abfrage in "ändern" ändern
LENGTH(EmployeeName) <= 4
oderLENGTH(EmployeeName) > 35
davon ausgehen, dass nur sehr wenige Mitarbeiter Namen mit weniger als 5 oder mehr als 35 Zeichen haben, wird der Index ausgewählt und die Leistung verbessert.Kurz gesagt: Achten Sie auf die Leistungsmerkmale von Abfragen wie der, die Sie schreiben möchten.
quelle
Heute habe ich dasselbe in db2 versucht und unten verwendet, in meinem Fall hatte ich Leerzeichen am Ende der varchar-Spaltendaten
quelle
Wenn beim Abfragen einer DB2-Datenbank dasselbe Problem auftritt, müssen Sie die folgende Abfrage verwenden.
quelle