AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Stringfunktionen

Offene Frage von "lonskiswerk"
Ein Thema von lonskiswerk · begonnen am 31. Jan 2010 · letzter Beitrag vom 31. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
lonskiswerk

Registriert seit: 31. Jan 2010
7 Beiträge
 
#1

SQL Stringfunktionen

  Alt 31. Jan 2010, 10:35
Datenbank: MySQL
Mit folgendem Code zeige ich alle Zeilen an, die die gleiche IP haben:

SQL-Code:
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
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.

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]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 10:38
Welches DBMS?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 10:38
Welches DBMS, bitte ergänze die Angaben
ZB. SUBSTRING(), SUBSTR()
Markus Kinzler
  Mit Zitat antworten Zitat
31. Jan 2010, 10:39
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Es geht um Datenbanken
lonskiswerk

Registriert seit: 31. Jan 2010
7 Beiträge
 
#5

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 10:44
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 10:49
Die Funktion LOCATE() bietet die Möglichkeit einen Offset für die Suche zu setzen
Markus Kinzler
  Mit Zitat antworten Zitat
lonskiswerk

Registriert seit: 31. Jan 2010
7 Beiträge
 
#7

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 11:02
Zitat von mkinzler:
Die Funktion LOCATE() bietet die Möglichkeit einen Offset für die Suche zu setzen
Danke, aber das hilft mir irgendwie nicht wirklich weiter. Statt Locate hätte ich auch einfach Position und SubString benutzen können.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 13:04
Hallo,

benutze zunächst REVERSE, dann die bereits genannten Möglichkeiten und zum Schluss (sofern für die Ausgabe erforderlich) nochmals REVERSE. Siehe MySql-Dokumentation: String-Funktionen

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 13:08
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
Markus Kinzler
  Mit Zitat antworten Zitat
lonskiswerk

Registriert seit: 31. Jan 2010
7 Beiträge
 
#10

Re: SQL Stringfunktionen

  Alt 31. Jan 2010, 14:54
Danke, der Tipp mit Reverse war Gold wert. Im Nachhinein verstehe ich auch, wie ihr das mit Locate meintet, aber ich bevorzuge doch die Version mit Reverse.

SQL-Code:
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)
Er brechnet `bis` korrekt (ohne ON-Clause), mit ON-Clause bekomme ich folgenden Fehler:

SQL Error: Unknown column 'bis' in 'on clause'
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz