Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

LIKE für nicht-CHAR?

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nicht alle Operatoren sind gleichermaßen für alle Datentypen geeignet. LIKE ist ein perfekter Operator für CHAR-Daten. Wie sieht es da mit anderen Datentypen aus? Der Vergleichsoperator außerhalb seines normalen Einsatzgebiets ist der Inhalt dieses Videos.

Transkript

Der Vergleichsoperator Like sollte in der Praxis eigentlich nur für Character Datentypen eingesetzt werden. Wie sieht es jetzt eigentlich aus, wenn man Like für nicht-Charakter Datentypen verwendet. Ich möchte Ihnen in diesem Video das anhand eines Beispiels erläutern. Generell könnten Sie auf die Idee kommen, um z.B. alle Mitarbeiter herauszufiltern, die in einem bestimmten Jahr, ich habe jetzt hier das Jahr 2008 angenommen, eingetreten sind, dass diese Mitarbeiter über die Form "Eintritt Like Prozent 2008 Prozent" gefunden werden könnten. Ich führe diese Anweisung hier beim Microsoft SQL Server aus, und siehe da, ich bekomme auch ein Ergebnis. Lediglich die Tatsache, dass wir ein gültiges Ergebnis bekommen, heißt noch lange nicht, dass diese Variante zielführend ist. Nicht alles, was funktioniert, muss deshalb gut sein. Denn diese Variante ist durchaus problematisch und reagiert bei unterschiedlichen Systemen unterschiedlich. Wenn ich jetzt z.B. hier das Prozent- zeichen am Ende nur stehen lasse, und das Erste entferne, bekomme ich keinen Treffer. Probieren wir noch aus, was passiert, wenn ich es umgekehrt realisiere. Auch dann bekomme ich keinen Treffer. Das ist doch etwas ungewöhnlich, weil offensichtlich kommt hier irgendwo in der Mitte des Strings, die Jahreszahl zu liegen. Woran liegt das? Im Prinzip haben wir eigentlich etwas gemacht, was wir nicht machen sollten. Wir haben ein Datum mit einem Text verglichen. Jetzt passiert natürlich wieder implizit systemintern eine Konvertierung. Wir wissen nicht, wie konvertiert wird, und deshalb ist es teilweise sehr undurchsichtig, wann und unter welchen Voraussetzungen diese Variante ein sinnvolles Ergebnis bringen wird. Deshalb rate ich dringend von so einer Variante ab. Wenn wir uns dasselbe bei unseren anderen Datenbankmanagementsystemen betrachten. Ich habe dieselbe Anweisung hier bei Oracle verwendet, in dem Fall bekomme ich weder ein Ergebnis, wenn ich Prozent vorne und hinten verwende mit 2008, oder umgekehrt, nur vorne oder nur hinten. Ich bekomme hier kein Ergebnis. Wenn ich das 20 hier weglasse, dann bekomme ich aufgrund des aktuellen Datenformates hier sehr wohl ein Ergebnis. D.h., Sie sehen, dass auch Standardformate etc. hier einen Einfluss nehmen, wann es zu einem Ergebnis kommt oder auch nicht. Und selbst bei MySQL ist diese Variante mit Problemen behaftet. Sehen wir uns das Ergebnis hier an. Wir bekommen hier zwar ein Ergebnis, wie sieht es aus, wenn wir vorne und hinten etwas weglassen? Wir bekommen in dieser Konstellation zwar ein Ergebnis, aber auch hier dürfen wir uns nicht drauf verlassen, dass diese Variante allgemein gültig ist. Sie sollten also ausschliesslich für Characterwerte "Like" verwenden. Manchmal kann es durchaus sinnvoll sein, einen Datentyp, der von sich aus kein Character ist, mit Like zu vergleichen. Wenn Sie das tun, dann sollten Sie allerdings bereits dazu übergehen, diesen anderen Datentyp zuvor auch wirklich in einen Character zu konvertieren, umzuwandeln. Denn dann wäre diese Variante wieder legitim. Was würde dies für unser Beispiel bedeuten? Sie könnten z.B. hier, ich beginne mit MySQL gleich meine Erläuterungen, hier her gehen und mit der Funktion "Date-Format-Eintritt" in ein uns gebräuchliches Format umwandeln. Und dann benötigen wir hier dieses schließende "Like" eigentlich nicht mehr, und diese Variante wäre nun zulässig, weil Sie ja mit der Date-Format Funktion das Ganze in einen Character oder einen String umwandeln. Wenn Sie sich diese Lösung betrachten, werden Sie allerdings feststellen: Wozu brauche ich dann eigentlich Like, das ist eigentlich umständlich, wenn wir hier schon konvertieren in ein komplettes Datumsformat umzuwandeln, und dann mit Like nur das Jahr herauszufiltern. Da könnte man ja einfacher das Ganze bewerkstelligen, indem wir hier das Format etwas kürzen und sagen, wir holen uns nur das Jahr heraus, dann brauchen wir aber kein Like mehr. Sie sehen, auch hier kann sich manchmal die Verwendung von Like bei nicht-Charactern ad absurdum führen. Denn so bekomme ich dasselbe Ergebnis. Und selbst das ist eigentlich noch etwas umständlich, denn Sie könnten ja direkt z.B. mit der Datumsfunktion "Year" das Jahr aus dem Datum als Zahl extrahieren, und dann direkt mit dem Vergleich "= 2008" umsetzen, und das ist natürlich noch einmal eine elegantere Variante, die natürlich auch in dem Fall zielführend ist. D.h. es zeigt, dass es sich häufig nicht rentiert, nicht-Characterwerte mit Like zu suchen. Es gibt Konstellationen, da macht es Sinn oder ist es notwendig, aber dann sollten Sie unbedingt über irgendeine Form der Konvertierung den nicht-Characterwert zuvor in einen Characterwert umwandeln. Wie sieht es nun bei Oracle aus bei derselben Aufgabenstellung? Auch hier haben wir gesehen, dass das Ganze ja sehr formatabhängig ist, und in dieser Form so nicht funktioniert hat. Aber natürlich können wir hier dieselbe Logik anwenden und können sagen, wir konvertieren das Ganze in einen Text mit einer Funktion "To Character", und können ja hier unser Format angeben DDMM und vier mal Y, um da dann direkt auf die Form zu kommen, wie vorhin. Endet auf 2008 und dann bekommen wir auch hier unabhängig vom Standard Datumsformat ein Ergebnis. Warum bekommen wir keines? Sie sehen, ich habe hier einen Tippfehler gemacht, ich habe ein Y zu wenig eingetippt, ich bessere das aus, und jetzt bekommen wir hier unser Ergebnis. Aber selbst hier werden Sie zurecht sagen, das Ganze ist doch eigentlich recht umständlich, wenn wir mit der Funktion "To Character" lediglich das Jahr alleine extrahieren, dann können wir das mit "=" filtern, und haben hier wieder eine wesentlich einfachere Form. Das wäre unter Oracle die allgemein gültige Form, wie Sie das tun würden, denn ein Pendant zur Hier-Funktion gibt es leider nicht. Und abschießend beim Microsoft SQL Server, dieselbe Aufgabenstellung auch hier wieder, wenn wir Like für ein nicht-Character verwenden, dann konvertieren wir zuvor in einen Character. Das erledige ich hier mit der Convert Funktion, und gebe z.B. in dem Fall gleich 104, unser deutsches Format ein, und dann würde die Variante mit Prozent 2008 auch hier korrekterweise ein Ergebnis liefern. Auch hier habe ich wieder ein Tippfehler eingebaut, unabsichtlich, das Convert mit zwei N geschrieben, ich bessere das aus, und wiederhole die Anweisung. Hier wäre die Verwendung rein syntaxmäßig von Like zulässig. Aber selbst hier stellt sich die Frage, könnten wir das nicht einfacher machen? Denn exakt gleich wie wir bei MySQL gesehen haben, gibt es ja eine Funktion hier, die aus dem Eintrittsdatum das Jahr herausfiltert, und selbst dann könnten wir mit dieser Form, where hier von "Eintritt = 2008" die Aufgabenstellung wesentlich eleganter lösen. Generell möchte ich also sagen, verwenden Sie Like ausschließlich für Character in Vergleichsausdrücken. Wenn Sie einen nicht-Character haben und mit Like vergleichen möchten, sollten Sie sinnvollerweise zuvor mittels Konvertierung in einen Character das Ganze sozusagen legalisieren. Ohne die Konvertierung in einen Character bleibt die Variante eher zufallsbehaftet, weil verschiedene Einflussgrößen  bestimmen, ob es ein Ergebnis gibt und wenn ja, ob es überhaupt ein korrektes gibt. Deshalb sollten Sie diese Variante nicht einsetzen.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!