Jan: SQL: nicht "=" sondern "enthält"

hallo,

ich hab folgende frage.
ist es mittels SQL auch möglich, einen
string abzufragen, der ein bestimmtes zeichen
enthält?
also ich hab ne spalte, wo mal die 7, mal 2;7
oder mal 2;5;7 drinsteht.
er soll mir aber alle datensätze ausgeben, wo die
7 drin vorkommt (also hier alle 3 möglichkeiten).
also würde doch die abfrage nicht ...WHER spalte = '7'
lauten, sonder irgendwas was mit "enthält" oder so...

vielen dank Jan

  1. hallo,

    ich hab folgende frage.
    ist es mittels SQL auch möglich, einen
    string abzufragen, der ein bestimmtes zeichen
    enthält?
    also ich hab ne spalte, wo mal die 7, mal 2;7
    oder mal 2;5;7 drinsteht.
    er soll mir aber alle datensätze ausgeben, wo die
    7 drin vorkommt (also hier alle 3 möglichkeiten).
    also würde doch die abfrage nicht ...WHER spalte = '7'
    lauten, sonder irgendwas was mit "enthält" oder so...

    vielen dank Jan

    Hallo Jan,

    versuchs mal mit "...where spalte like '%7%'..." Die "%" sind dabei als Platzhalter zu verstehen.

    MfG

    Mark

  2. hallo,

    ich hab folgende frage.
    ist es mittels SQL auch möglich, einen
    string abzufragen, der ein bestimmtes zeichen
    enthält?
    also ich hab ne spalte, wo mal die 7, mal 2;7
    oder mal 2;5;7 drinsteht.
    er soll mir aber alle datensätze ausgeben, wo die
    7 drin vorkommt (also hier alle 3 möglichkeiten).
    also würde doch die abfrage nicht ...WHER spalte = '7'
    lauten, sonder irgendwas was mit "enthält" oder so...

    Sieht nach schlechtem DB-Design aus.
    Wenn Du eine "Spalte" hast, in der pro Datensatz mehr als 1 Wert stehen kann, gehören diese Werte in eine Extra-Tabelle, im Datensatz steht dann nur eine id, mit der die Werte aus der Extra-Tabelle geholt werden.
    Bsp:
    WER NAME    SPRACHEN
    ich andreas sql,html,php
    du  mark    html

    wird zu:
    ID WER NAME
    23 ich andreas
    17 du  mark

    und

    ID SPRACHE
    23 sql
    23 html
    23 php
    17 html

    Ansonsten: irgendwas wie like '%7%', aber das matcht auch auf '1;17;23' oder '71;83' ...

    Andreas

    1. Hi Mudguard!

      Sieht nach schlechtem DB-Design aus.

      nicht unbedingt. Kommt auf die Verwendungsweise und den Sinn an, der hinter den Werten steckt.

      höchst-normalisierte Tabellen sind auch nicht immer das Non+Ultra

      du mußt ja auch bedenken, dass die Daten _angefasst_ werden müssen über entspr. SQL-Statements

      Wenn Du eine "Spalte" hast, in der pro Datensatz mehr als 1 Wert stehen kann, gehören diese Werte in eine Extra-Tabelle, im Datensatz steht dann nur eine id, mit der die Werte aus der Extra-Tabelle geholt werden.

      MySQL kann ja keine geschachtelten Recordsets oder Sub-Selects etc. (ich hab zmd. keine positiven Aussagen im Handbuch gefunden), d. h. du mußt dann mit mehreren einzelnen Recordsets arbeiten... egal.... jedenfalls ist es abhängig vom dahinterliegenden Zweck.

      Gruß, Frank

  3. Huhu Jan

    den Hinweis auf LIKE hast Du ja schon bekommen.

    Spätestens wenn Du Einträge wie

    2;17;123
    2;5;77
    7;17;787

    o.ä.

    nach der "7" durchsuchen möchtest reicht LIKE aber nicht mehr aus

    schau Dir dann das hier an (regexp):

    http://www.mysql.com/doc/en/String_comparison_functions.html

    evtl. lohnt es sich auch das Tabellen-Layout zu überarbeiten, da
    es meist keine gute Idee ist mehrere Daten im CSV-Format in eine DB-Spalte zu stecken.
    Auch sind es ja eigentlich Integerwerte die gespeichert werden sollen und keine Strings, oder?

    Viele Grüße

    lulu