Zum Inhalt springen

SQL: Feld das einen String NICHT enthält


McCaffrey

Empfohlene Beiträge

Hallo,

ich habe eine MySQL Datenbank mit Logeinträgen eines Routers. Die Log-Nachrichten stehen in einem Feld (also ungefähr folgender Eintrag: "permit ip Port to ip Port"

Nun loggt dieser Router sehr oft Verbindungen von einem System, die ich nicht angezeigt haben möchte. Deswegen brauche ich eine SQL Abfrage, die mir sämtliche Felder anzeigt, in denen der String x.x.x.x(Port) nicht drin vorkommt. Dies hab ich bisher mit dem Operator NOT LIKE versucht, aber keinen Erfolg erzielt. Wenn ich nur ein Like verwende, zeigt er mir die Felder die ich aussortieren will, dass heißt mein Suchstring ist richtig, aber mein Operator wohl nicht.

Kann mir jemand einen Operator nennen, mit denen ich diese Anforderung umsetzen kann? Hab mir schon die Augen ausgegoogelt, aber immer nur NOT, != und <> gefunden. Die lösen aber nicht mein Problem!

THX

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by -leliel-

... WHERE feld NOT LIKE 'string' ...

ist die richtige reihenfolge. :P

Hi,

grade mit dieser Reihenfolge funktioniert es leider nicht :( (mit der anderen übrigens auch nicht ;) )

Wenn ich WHERE feld LIKE "string" mache zeigt er mir alle Datensätze an, die den String enthalten den ich ja nicht haben will

Wenn ich WHERE feld NOT "string" eingebe, um eben diesen String auszufiltern, zeigt er mir alle Datensätze an :confused:

Meine Query sieht folgendermaßen aus:

SELECT Tabelle.*, Tabelle.Feld

FROM Tabelle

WHERE (Tabelle.Feld) NOT LIKE "*12.34.56.78(90)*" OR (Tabelle.Feld) NOT LIKE "*09.87.65.43(21)*"

ORDER BY Tabelle.Feld;

Das Feld in der Tabelle so:

2029711: Oct 25 14:13:12 MESZ: %SEC-6-IPACCESSLOGP: list NAME_ACL permitted udp 12.34.56.78(90) -> 12.3.4.5(678), 1 packet

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achja,

dadurch das ich das Log nur temporär auswerten muss, greife ich mit Microsoft Access 97 über eine ODBC Verknüfung auf die MySQL Datenbank zu. Die SQL Abfrage führe ich dann mit Access durch.

Vielleicht gibt es da ja etwas Access-spezifisches weswegen das ganze nicht funktioniert.

Danke für alle Tips

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

mit % als Platzhalter hab ich auch schon versucht, aber leider ohne Erfolg. Das gleiche auch wenn ich keine Platzhalter verwende.

Aber der Suchstring muss eigentlich richtig sein, weil eben die Suche nach Feldern die eben diesen Eintrag enthalten erfolgreich ist.

Das Problem ist dass der Operand NOT LIKE nicht anerkannt wird. Ich hab ein paar Felder (in der selben Tabelle) einfach mit abwechselnd mit 1 und 2 gefüllt um mir dann mit NOT LIKE die Felder anzuzeigen, die keine 2 enthalten. Das funktioniert genauso so wenig. Wenn ich mit LIKE die Felder anzeigen will die eine 2 enthalten funktioniert es aber widerrum.

Also kann das NOT LIKE nicht stimmen. Aber was kann ich alternativ verwenden?

Danke für deine Hilfe

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by McCaffrey

Meine Query sieht folgendermaßen aus:

SELECT Tabelle.*, Tabelle.Feld

FROM Tabelle

WHERE (Tabelle.Feld) NOT LIKE "*12.34.56.78(90)*" OR (Tabelle.Feld) NOT LIKE "*09.87.65.43(21)*"

ORDER BY Tabelle.Feld;

Moin !

die Querry ist völlig in Ordnung, Du hast nur einen logischen Fehler drinn, statt OR musst Du AND verwenden.

gruß

Christian

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Tauron,

also am OR oder AND liegt es auf keinen Fall. Das hab ich grad auch nochmal zur Sicherheit getestet.

Es muss OR sein, weil die gesuchten IP Adressen nie zusammen in einem Feld auftauchen. Sondern es gibt eben VErbindungen die entweder von der einen IP, oder von der anderen IP mitprotokolliert werden.

Abgesehen davon, wenn ich nur nach einer IP suche (oder wie im BEispiel oben nach der "2") funktioniert das ganze auch nicht! Es liegt also am NOT LIKE. Das funktioniert nicht.

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm dann muss das Problem woanders liegen, habe mir gerade eine Tabelle mit ein paar Variationen deines obengenannten Beispiels erstellt und deine Abfrage verwendet, mit dem AND.. funzt bei mir (Access 97) einwandfrei, die Syntax scheint zu stimmen.

Zu dem And:

da es sich um zwei Bedingungen handelt die nicht zutreffen dürfen darfst Du kein OR verwenden. Eine OR Verknüpfung liefert WAHR zurück, wenn eine der beiden Bedingungen auch WAHR ist.

Nehmen wir an, Du hast einen dieser Datensätze in dem die erste von den beiden ungewollten IPs drin ist.

Er schaut nun in den Datensatz und vergleicht ihn mit der ersten Bedingung. Diese trifft zu und durch die Verneinung (NOT LIKE) wird FALSCH übergeben.

Dann vergleicht er es mit der zweiten Bedingung, diese trifft ja nicht zu. Durch die Verneinung wird hier jetzt WAHR übergeben.

Jetzt kommt die Verknüpfung ins Spiel, er hat "FALSCH OR WAHR", das Ergebnis ist WAHR, also ist der Datensatz für ihn in Ordnung.

Bei AND erhält er "FALSCH AND WAHR", das Ergnis ist folglich FALSCH und er überspringt den Datensatz wie gewollt.

sorry, daß das so ein Psalm wurde, aber ich hoffe es hilft Dir weiter !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, McCaffrey!

Probier mal folgendes:

SELECT * FROM t_Tabelle WHERE x_Text not Like "*x.x.x.x*";

Ich habe es auch folgender t_Tabelle laufen lassen:

x_Nummer x_Text

1 1x.x.x.x1

2 2y.y.y.y2

3 3x.x.x.y3

4 4x.x.x.x4

Und das schmeißt mir nur Nr. 2 und 3 raus.

Hoffe, ich hab Dein Problem richtig verstanden...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

danke für deine Hilfe @piomode!

Ich kann aber in deinem SQL Statement nicht den Unterschied zu meiner bisherigen Abfrage erkennen?:confused:

Aber dies war auch nicht die Lösung des Problems. Die hat Tauron gepostet, auch wenn ich es zuerst nicht glauben wollte. Aber als ich am Wochenende Zeit hatte hab ich mir noch mal gaaaaanz langsam die Antwort von Tauron durchgelesen, nachdem ich zuerst nicht ganz verstanden hatte was er meinte.

Aber siehe da: Er hatte Recht.

Obwohl ich mir sicher bin es vor dem Wochenende mit einem AND versucht zu haben - ohne einen Erfolg, hab ich am Montag an der Abfrage gebastelt und das ganze umgestellt und ein AND verwendet.

Und siehe da, es funktionierte!!! Also alleine wäre ich auf diese Lösung wahrscheinlich nie gekommen.

Danke an alle und ganz besonders Tauron für die ausführliche Erklärung!

mfg

McCaffrey

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...