SQL LIKE
Tine
- datenbank
Hallo!
ich habe eine access Tabelle. In der Spalte "Flaechendeckung" stehen die Namen von Bundesländern (leider mehrere durch Komma getrennt).
Nun möchte ich diese per LIKE abfragen. Leider gibt es "Sachsen", "Sachsen-Anhalt" und dann auch noch "Niedersachsen". Wenn ich jetzt also
SELECT * FROM Tabelle WHERE Flaechendeckung LIKE '%sachsen%'
abfrage, bezieht sich diese auf alle drei Bundesländer. Wenn ich die wildcards weg lasse, bekomme ich natürlich nur die Einträge in denen nur "Sachsen" steht. Nicht aber z.B. "Sachsen, Bayern".
Wie bekomme ich das in der mir vorgegebenen DB Struktur hin, dass ich nur nach "Sachsen" suchen kann?
Danke,
Tine
Wie bekomme ich das in der mir vorgegebenen DB Struktur hin, dass ich nur nach "Sachsen" suchen kann?
Du konntest mit CONCAT() arbeiten (
dein Feldinhalt "foo,foobar,baz,"
du willst nach "foo" suchen, also musst du deinen Feldinhalt auf ",foo,foobar,baz," erweitern und nach ",foo," suchen.
Das ist eine äußerst dämliche herangehensweise aber dürfte funktionieren.
Das ist eine äußerst dämliche herangehensweise ...
Richtig (mir wärs auch lieber wenn da z.B. mit einer Hilfstabelle gearbeitet worden wäre.
aber dürfte funktionieren.
zum Glück genauso richtig :-)
Danke
Hallo!
abfrage, bezieht sich diese auf alle drei Bundesländer. Wenn ich die wildcards weg lasse, bekomme ich natürlich nur die Einträge in denen nur "Sachsen" steht. Nicht aber z.B. "Sachsen, Bayern".
Dein Sachsen hat drei Möglichkeiten, zu erscheinen:
Sachsen, Bayern (gefolgt von Komma und Leerstelle)
Sachsen (allein)
Thüringen, Sachsen (angeführt von Komma und Leerstelle)
also:
LIKE "Sachsen, " OR ... LIKE "Sachsen" OR ... LIKE ", Sachsen"
Gruß, Kalle
LIKE "Sachsen, " OR ... LIKE "Sachsen" OR ... LIKE ", Sachsen"
Wenn der Normalbenutzer den Suchbegriff aber selbst eingeben darf, wird schon wieder schwierig.
Wenn der Normalbenutzer den Suchbegriff aber selbst eingeben darf, wird schon wieder schwierig.
Ne, der bekommt die möglichen Suchbegriffe per select.
Nochmal nachgedacht ...
LIKE "%, Sachsen" (am Ende einer Aufzählung)
LIKE "Sachsen, %" (am Anfang einer Aufzählung)
LIKE "%, Sachsen, %" (mittendrin)
LIKE "Sachsen" (alleinstehend)
Nochmal nachgedacht ...
LIKE "%, Sachsen" (am Ende einer Aufzählung)
LIKE "Sachsen, %" (am Anfang einer Aufzählung)
LIKE "%, Sachsen, %" (mittendrin)
LIKE "Sachsen" (alleinstehend)
Das mit dem %, usw. ist gut. Aber hätte ich mit Deinem letztem LIKe nicht auch wieder alle?
moin,
Das mit dem %, usw. ist gut. Aber hätte ich mit Deinem letztem LIKe nicht auch wieder alle?
nein, hast du nicht, weil dort das % zeichen komplett fehlt. er hätte dafür nicht den LIKE operator nehmen sollen, sondern um es deutlicher auszudrücken das gleichheitszeichen, sprich der string beinhaltet nur Sachsen. ich bin mir nicht sicher, ob Access die doppelten anführungszeichen will, wenn nicht, würde ich die einfachen nehmen. außerdem würde ich dir zur regulären ausdrückken raten, wenn auch das access kann.
....OR Flaechendeckung = 'Sachsen'
Ilja
Hallo Ilja,
nein, hast du nicht, weil dort das % zeichen komplett fehlt. er hätte dafür nicht den LIKE operator nehmen sollen, sondern um es deutlicher auszudrücken das gleichheitszeichen, sprich der string beinhaltet nur Sachsen. ich bin mir nicht sicher, ob Access die doppelten anführungszeichen will,
in Jet-SQL: nein.
Doppelte Anführungszeichen zur Kennzeichnung von Zeichenketten führen zu einer Fehlermeldung :-) Zeichenketten sind im SQL-Dialekt, den Access beherrscht, zwingend mit einfachen Anführungszeichen zu begrenzen.
Im QBE-Editor: ja. Intern wird's natürlich zu SQL mit einfachen Anführungszeichen umgesetzt.
wenn nicht, würde ich die einfachen nehmen. außerdem würde ich dir zur regulären ausdrückken raten, wenn auch das access kann.
Jet-SQL kann das nicht nativ, aber für Access ist das über die Programmierschnittstelle nachrüstbar.
Freundliche Grüße
Vinzenz
Hi Kalle_B!
also:
LIKE "Sachsen, " OR ... LIKE "Sachsen" OR ... LIKE ", Sachsen"
Dann hat er aber wieder "Niedersachsen" und "Sachsen-Anhalt" in der Ergebnismenge. ;-)
MfG H☼psel
moin,
Dann hat er aber wieder "Niedersachsen" und "Sachsen-Anhalt" in der Ergebnismenge. ;-)
er hat sich doch schon selbst korregiert, insofern braucht man sich auch nicht mehr auf diese aussage beziehen, sondern sollte sich seine fallunterscheidung anschauen...
Ilja
Hi Ilja!
er hat sich doch schon selbst korregiert, insofern braucht man sich auch nicht mehr auf diese aussage beziehen, sondern sollte sich seine fallunterscheidung anschauen...
Recht hast du.
Ich hatte mir seine Richtigstellung nur ungenügend angeschaut und da er selbst nicht schrob™, dass sein vorangegangener Post fehlerhaft war, habe ich mich nicht näher damit beschäftigt, sondern war total darauf fixiert, die Sache richtig zu stellen und wollte damit auch wirklich niemandem wehtun oder sonst irgendwie provozieren, was man ja auch an dem kleinen Smily hinter meiner Antwort sehen kann, den ich genau deshalb dort platzierte, weil mir schon irgendwie klar war, dass er seinen Fehler noch entdecken und ggf. ausbessern würde, um so dem Fragesteller auf die richtige Spur zu helfen.
MfG H☼p~puuuh~sel
PS: ;-)
moin,
Wie bekomme ich das in der mir vorgegebenen DB Struktur hin, dass ich nur nach "Sachsen" suchen kann?
erstens mit dem DBA reden, ob man das nicht grundsätzlich ändern kann oder wenn nicht welche gründe es dafür gibt.
zweitens wenn der erste punkt nicht zu einer datenbankänderung geführt hat, den DBA bitten, dir eine abfrage dafür zur verfügung stellt, damit er selber mit diesen daten-strukturen arbeiten muss.
drittens, hat alles kein erfolg, mit regulären ausdrücken arbeiten, wenn access das kann
Ilja