Petra: "Gegenstück" zu LIKE

Hallo,

ich habe in einer DB Spalte z.B. folgendes:

+--------+
|foo     +
+--------+
|foobar  +
+--------+
|bar     +
+--------+

Mit SELECT spalte FROM tabelle WHERE spalte LIKE '%foo%'
bekomme ich die ersten beiden Datensätze. O.k., aber geht das auch "anders herum", also:
SELECT spalte FROM tabelle WHERE >DasGegenstückZuLike< 'Ich sitze in einer bar' sollte mir dann den lezten Datensatz zurück geben weil der Inhalt von spalte ('bar') nur dort in der Klausel enthalten ist.

Gibt es so etwas?

LG
Petra

    1. Hello,

      NOT LIKE

      Petra meinte nicht "das Gegenteil" sondern "das Gegenstück", also eine Abfrage, bei der die Argumente vertauscht sind.

      Und ja, ich finde auch, dass sich die Lösung von Matti ganz pfiffig ist, auch wenn sie vermutlich extrem teuer sein wird, wie alle LIKE-Abfragen eben.

      Ich habe sie jedenfalls in meine Sammlung aufgenommen :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://restaurant-zur-kleinen-kapelle.de
  1. Hallo,

    ich habe in einer DB Spalte z.B. folgendes:

    +--------+
    |foo     +
    +--------+
    |foobar  +
    +--------+
    |bar     +
    +--------+

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE '%foo%'

    kommt

    • foo
    • foobar

    Ich weiß nicht genau, was Du mit "Gegenteil" meinst. Deshalb zwei Teile:
    (Part 1: Like)

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE '%bar'
    kommt

    • foobar
    • bar

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE 'bar%'
    kommt

    • bar

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE 'bar%'
    kommt

    • bar

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE 'f%bar%'
    kommt

    • foobar

    (Part 2: REGEX:)

    Das "Feinverhalten" lässt sich mit einem REGEX bestimmen:

    Mit SELECT spalte FROM tabelle WHERE spalte = REGEX('^[Bb]ar.*$')
    kommt

    • kommt alles, was mit Bar oder bar beginnt.

    Mit SELECT spalte FROM tabelle WHERE spalte = REGEX('^.*[Bb]ar$')
    kommt

    • kommt alles, was mit Bar oder bar endet.

    Reguläre Ausdrücke sind "teuer" (brauchen "lange" fürs Abarbeiten) und verursachen einen Lernaufwand - der sich allerdings lohnt.

    Jörg Reinholz

  2. Hi,

    Mit SELECT spalte FROM tabelle WHERE spalte LIKE '%foo%'
    bekomme ich die ersten beiden Datensätze. O.k., aber geht das auch "anders herum", also:
    SELECT spalte FROM tabelle WHERE >DasGegenstückZuLike< 'Ich sitze in einer bar' sollte mir dann den lezten Datensatz zurück geben weil der Inhalt von spalte ('bar') nur dort in der Klausel enthalten ist.

    Gibt es so etwas?

    Das geht ebenfalls mit LIKE, ist aber nicht sonderlich schön...
    SELECT spalte FROM tabelle WHERE 'Ich sitze in einer bar' LIKE CONCAT('%', spalte, '%')

    Bis die Tage,
    Matti

    1. Hallo,

      Das geht ebenfalls mit LIKE, ist aber nicht sonderlich schön...
      SELECT spalte FROM tabelle WHERE 'Ich sitze in einer bar' LIKE CONCAT('%', spalte, '%')

      Das ist eine von diesen Juwelen, für die es sich lohnt, hier regelmäßig mitzulesen...

      Gruß
      Kalk

    2. Das geht ebenfalls mit LIKE, ist aber nicht sonderlich schön...
      SELECT spalte FROM tabelle WHERE 'Ich sitze in einer bar' LIKE CONCAT('%', spalte, '%')

      Kommt mir doch bekannt vor.

      http://forum.de.selfhtml.org/archiv/2008/4/t169368/#m1106146http://

  3. WHERE INSTR('Ich sitze in einer Bar', spalte) > 0

    ginge auch ...

    1. Hello,

      WHERE INSTR('Ich sitze in einer Bar', spalte) > 0

      wenn es jetzt schon weiter in die Tiefe geht, sollte man auch daran denken:

      • Case (In)Sesivitiy
      • Collation

      Das müsste man ggf. auch berücksichtigen.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://restaurant-zur-kleinen-kapelle.de