![]() |
Datenbank: MySQL
SQL Stringfunktionen
Mit folgendem Code zeige ich alle Zeilen an, die die gleiche IP haben:
SQL-Code:
Nun möchte ich gerne auf "ähnliche" IP's durchsuchen, also dass nur die ersten 3 IP-Blöcke gleich sein müssen, um die Zeilen anzuzeigen.
SELECT
J.* FROM (SELECT X.ip FROM data AS X GROUP BY X.ip Having Count(*) > 1) INNER JOIN data AS J ON X.ip = J.ip Ich würde das gerne über SQL lösen, ich weiß aber überhaupt nicht, ob sich das mit SQL internen String-Funktionen lösen lässt. [edit=mkinzler]Angaben zur Datenbank ergänzt Mfg, mkinzler[/edit] |
Re: SQL Stringfunktionen
Welches DBMS?
|
Re: SQL Stringfunktionen
Welches DBMS, bitte ergänze die Angaben
ZB. SUBSTRING(), SUBSTR() |
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Es geht um Datenbanken |
Re: SQL Stringfunktionen
Danke für eure Antworten.
Es geht um MySQL. Ich habe mir 3 Funktionen rausgesucht: POSITION('x' IN spalte) SUBSTRING(spalte FROM x FOR y) CHARACTER_LENGTH(spalte) Mein Problem ist, dass POSITION nur die Position des 1. Punktes aus der IP liefern würde, ich brauche aber den letzten. Wenn ich ihn in den letzten 4 Zeichen mittels SUBSTRING suche, gibt es Probleme wenn die IP so aussieht: 87.154.1.1, denn dann findet er den 2. Punkt ... Irgendwie scheitert es immer an einer Sache. :( |
Re: SQL Stringfunktionen
Die Funktion LOCATE() bietet die Möglichkeit einen Offset für die Suche zu setzen
|
Re: SQL Stringfunktionen
Zitat:
|
Re: SQL Stringfunktionen
Hallo,
benutze zunächst REVERSE, dann die bereits genannten Möglichkeiten und zum Schluss (sofern für die Ausgabe erforderlich) nochmals REVERSE. Siehe ![]() Gruß Jürgen |
Re: SQL Stringfunktionen
Da es eine definierte Anzahl von Punkten in einer IP-Adresse gibt, könnte REVERSE zum Ziel führen.
Aber Allgemein sollte Locate schon funktionieren Wenn man die Position des 1. Punktes kennt kann man diese +1 als Offset verwenden |
Re: SQL Stringfunktionen
Danke, der Tipp mit Reverse war Gold wert. :D Im Nachhinein verstehe ich auch, wie ihr das mit Locate meintet, aber ich bevorzuge doch die Version mit Reverse.
SQL-Code:
Er brechnet `bis` korrekt (ohne ON-Clause), mit ON-Clause bekomme ich folgenden Fehler:
SELECT
J.*, (J.time2 - J.time1) AS diff1, (J.time3 - J.time1) AS diff2, (CHARACTER_LENGTH(J.ip)-POSITION('.' IN REVERSE(J.ip))+1) AS bis FROM (SELECT X.ip FROM data AS X GROUP BY X.ip Having Count(*) > 1) As B INNER JOIN data AS J ON SUBSTRING(B.ip FROM 1 FOR bis) = SUBSTRING(J.ip FROM 1 FOR bis) SQL Error: Unknown column 'bis' in 'on clause' |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz