SQL: nicht "=" sondern "enthält"
Jan
- datenbank
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,
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
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
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
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