SQL-Befehl
jm
- datenbank
Hallo,
ich suche einen SQL-Befehl womit ich aus einem Datensatz, wo mehrere Wörter drin stehen können, über die Suchbedingung nach einem Wort suchen kann. Bsp.: DS1(Disponent, Einsatzleiter), DS2(Disponent), ich suche nun alle DS wo 'Disponent' enthalten ist.
Meine Idee war:
SELECT * FROM tabelle WHERE taet='*Disponent*';
Das funktioniert aber nicht. Kann mir jemand den richtigen SQL-Befehl sagen. Vielen Dank.
Viele Grüße
jm
Hello,
Meine Idee war:
SELECT * FROM tabelle WHERE taet='*Disponent*';
Das Gleichheitszeichen steht für den genauen (aber meistens case insensitive) Vergleich.
Einen Teilstring-Match kannst Du mit
where taet like '*Disponent*'
oder mit
where locate('Disponent',taet) > 0
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
where taet like '*Disponent*'
oder mit
where locate('Disponent',taet) > 0
leider funktionieren dein Vorschläge nicht bei mir.
Bei der like-Variante (SELECT * FROM tabelle WHERE taet LIKE '*Disponent*') steht im Resultat garkein DS mehr drin. Und bei der locate-Variante kommen Fehlermeldungen. Kann es daran liegen, dass ich mit einer InterBase-DB arbeite und nicht bspw. mit mySQL? Hatte schon öfters, dass einige Befehle nicht funktionieren.
Viele Grüße
jm
Hello,
where taet like '*Disponent*'
oder mit
where locate('Disponent',taet) > 0
leider funktionieren dein Vorschläge nicht bei mir.
Bei der like-Variante (SELECT * FROM tabelle WHERE taet LIKE '*Disponent*') steht im Resultat garkein DS mehr drin. Und bei der locate-Variante kommen Fehlermeldungen. Kann es daran liegen, dass ich mit einer InterBase-DB arbeite und nicht bspw. mit mySQL? Hatte schon öfters, dass einige Befehle nicht funktionieren.
Ja.
Da müsste man nun die Fähigl´keit zur Transformation (oder heißt das nicht so?) haben. Also die Anregungen nur als Idee auffasssen und mit den vorhandenen Ggebenheiten abgleichen, also analoge Befehle und Funktionen suchen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Das Gleichheitszeichen steht für den genauen (aber meistens case insensitive) Vergleich.
Einen Teilstring-Match kannst Du mitwhere taet like '*Disponent*'
Dann bekommt er aber nur die Datensätze, wo taet "*Disponent*" heißt und nicht z.B. auch "LKW-Disponent", "Paketdisponent" und "Megadisponentenfuzzi"...
Wildcards bei LIKE sind % für kein oder mehrere beliebige Zeichen und _ für genau ein beliebiges Zeichen.
Der Yeti
Hi,
Wildcards bei LIKE sind % für kein oder mehrere beliebige Zeichen und _ für genau ein beliebiges Zeichen.
Kommt auf das RDBMS an, bei MS Access ist die Wildcard "*".
Melanie
Hi,
Kommt auf das RDBMS an, bei MS Access ist die Wildcard "*".
Eckschiss zähle ich nicht zu den RDBMS, das ist ein Excel, was aussieht, wie eine Datenbank ... *kotzwürg*
Außerdem kommt es doch hoffentlich auf das verwendete SQL an (was natürlich meistens schon Unterschiede je nach DBMS hat).
Aber im Grunde hast du recht, ich war einfach "per default" von MySQL ausgegangen, aber da jm kein spezielles *SQL angegeben hat war diese Annahme erstmal falsch. Da mein Tipp aber funktionierte benutzt er wohl zumindest eine SQL-(Ab)art, bei der % und _ des Rätsels Lösung sind.
Der Yeti
Hi,
Nu lass mich doch auch mal Korinthenkacker spielen ;-)
Es irritiert mich halt immer etwas wenn immer automatisch angenommen wird dass die Welt sich nur um PHP und MySQL dreht (wobei ich nichts gegen genannte Technologien habe, und MS Access auf Armlaenge halte).
Und so ziemlich alle sql-faehigen Datenbanksysteme mit denen ich bisher zu tun hatte, hatten halt ihre eigene Auspraegung von SQL (wenn auch nicht unbedingt in Bezug auf LIKE).
Melanie
Hi,
Nu lass mich doch auch mal Korinthenkacker spielen ;-)
War ja auch richtig. ;-)
Es irritiert mich halt immer etwas wenn immer automatisch angenommen wird dass die Welt sich nur um PHP und MySQL dreht (wobei ich nichts gegen genannte Technologien habe, und MS Access auf Armlaenge halte).
Habe auch bei C# und MSSQL keine anderen Wildcards kennengelernt. ;-)
Aber im Grunde hast du ja recht, wie gesagt. Meines Erachtens ist es nämlich in ANSI-SQL schon so festgelegt (Irrtum vorbehalten).
Und so ziemlich alle sql-faehigen Datenbanksysteme mit denen ich bisher zu tun hatte, hatten halt ihre eigene Auspraegung von SQL (wenn auch nicht unbedingt in Bezug auf LIKE).
Jap.
Der Yeti
Hello,
Kommt auf das RDBMS an, bei MS Access ist die Wildcard "*".
Eckschiss zähle ich nicht zu den RDBMS, das ist ein Excel, was aussieht, wie eine Datenbank ... *kotzwürg*
Also ACCESS ist nicht MS-SQL-Server. Der ist 'geklaut' von Sysbase und leider nicht mit der Intelligenz von Sybase weiterentwickelt worden. ACCESS benutzt üblicherweise die JET-Engine, die auch nicht bei Microsoft entwickelt wurde und, soweit sie von den ursprünglichen Entwicklern stammt, einfach genial gut ist.
Schließlich ist die JET-Engine eine verteilte File-Server-Applikation.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
Einen Teilstring-Match kannst Du mit
where taet like '*Disponent*'
Dann bekommt er aber nur die Datensätze, wo taet "*Disponent*" heißt und nicht z.B. auch "LKW-Disponent", "Paketdisponent" und "Megadisponentenfuzzi"...
Jaaaaaaaaa!
Natürlich steth meistens das '%' als Jikerzeichen in SQL.
Ich wollte auch noch den Link zur MySQL-Page setzen, aber da klingelte das Telebimmel und ich wurde zur Besprechnung gerufen. Und Kunden, die mit Auftrag drohen, gehen heutzutage eben einfach vor ;-)
Bisschen mitdenken muss man natürlich auch noch...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Meine Idee war:
SELECT * FROM tabelle WHERE taet='*Disponent*';Das funktioniert aber nicht. Kann mir jemand den richtigen SQL-Befehl sagen. Vielen Dank.
Meine Idee ist:
SELECT * FROM tabelle WHERE taet LIKE '%Disponent%';
Siehe [Link:http://dev.mysql.com/doc/mysql/de/Pattern_matching.html].
Der Yeti
Hallo Yeti,
SELECT * FROM tabelle WHERE taet LIKE '%Disponent%';
So hat es geklappt.
Vielen Dank und viele Grüße
jm