Mario: SELECT String, + 10 Zeichen vor und 200 Zeichen nach dem String

Liebe Forumianer,

mit folgendem SQL kann ich die ersten 200 Zeichen eines Datensatzes ausgeben lassen:

SELECT SUBSTRING (spalte 1,200) as spalte FROM tabelle;

Wenn ich in der Spalte aber noch nach einem String suche und mir 10 Zeichen vor und 190 Zeichen nach dem gefundenen Suchstring ausgeben will (wie bei einem Suchergebnis bei Google...), wie muß ich das Select gestalten?
Ich will nicht die komplette Spalte auslesen und anschließend mit PHP bearbeiten. Sondern wie gesagt gleich über das SELECT.

Kann mir jemand helfen?

Danke Mario

  1. Hi,

    Wenn ich in der Spalte aber noch nach einem String suche und mir 10 Zeichen vor und 190 Zeichen nach dem gefundenen Suchstring ausgeben will (wie bei einem Suchergebnis bei Google...), wie muß ich das Select gestalten?

    die Zahlen 1 und 200 müssen dynamisch berechnet werden. Überlege Dir (=suche in der Doku Deines DBMS - welches immer das sein mag), mittels welcher Funktion Du die Position eines Suchtreffers ermittelst.

    Ich will nicht die komplette Spalte auslesen und anschließend mit PHP bearbeiten. Sondern wie gesagt gleich über das SELECT.

    Das ist weise. Im übrigen haben SQL-Fragen nichts, aber auch wirklich gar nichts mit PHP oder ähnlichem zu tun. Bitte gib *unbedingt* bei *jeder* datenbankspezifischen Frage - die Du bitte dem Themenbereich "DATENBANK" zuordnest - das von Dir verwendete DBMS an.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Danke Dir Cheatah,

      Ok es war ein MySQL-Select was in einer PHP-Anwendung verwendet werden soll. Darum meine Wahl "PHP". Hast Du eine Idee, wie ich die Position genau bestimmen kann?

      Vielen Dank, Mario

  2. Hello,

    SELECT SUBSTRING (apalte, instr(spalte,$such),30) as spalte FROM tabelle;

    bei MySQL müsste das so gehen. Aber instr() liefert 0 wenn der gesuchte String nicht in der Palte enthalten ist. Da muss man ggf. noch ein if() spendieren.

    SELECT SUBSTRING (spalte, if(instr(spalte,$such)>0,instr(spalte,$such),1),30) as spalte FROM tabelle;

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Lieber Tom,

      das sieht ziemlich gut aus. Ich probiere das nachher gleich aus.

      Vielen Dank und Gruß aus Leipzig.

    2. Hello,

      SELECT SUBSTRING(VARC,if(instr(VARC,"Peter")>0,instr(VARC,"Peter"),1),10) as V FROM TEST;

      So funktioniert es und man bekommt immer was angezeigt. Wenn man bei Substring() 0 als Startwert angibt, liefert MySQL kein Ergebnis. Das kann in deinem Fall ja auch erwünscht sein. Ob das allerdings verbrieftes Verhalten sit, weiss ich nicht.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen