MySql - Spalte = Anfang_des_Strings
daniel g
- datenbank
Hallo Selfer,
habe eine MySql-Tabelle mit einer Spalte nennen wir sie spalte.
In dieser stehen Werte wie:
ha4ujk93
ha4ujk9358
ha4u
Jetzt habe ich als "Suchstring" z.B. ha4ujk.
Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt, also er muss am Anfang stehen, was danach kommt ist mir egal.
Wie realisiere ich das?
Gruß
P.S.: Was ich vergessen habe.
Der Suchstring kann auch länger als die längste Spalte sein.
Also ha4ujk9358blabla
Dann sollen in dem Beispiel die 3 Einträge gefunden werden.
Gruß
Mahlzeit daniel g,
Der Suchstring kann auch länger als die längste Spalte sein.
Also ha4ujk9358blabla
Dann sollen in dem Beispiel die 3 Einträge gefunden werden.
Das ist aber eine andere Anforderung als die, die Du genannt hast:
Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt
Außerdem ist sie IMHO wenig sinnvoll: Du willst also auch Einträge finden, die NICHT den Suchbegriff enthalten, sondern nur Teile des Suchbegriffs?
Was genau willst du?
MfG,
EKKi
Hallo,
danke erstmal für die Antwort.
Also die Spalte enthält irgendwelche Strings.
Letztendlich brauche ich ein "gestaffeltes" Ergebnis:
z.B. Ich suche in folgenden Zeilen nach hallo
ha
hall
Da keine Zeile = hallo, werden hall und ha und zwar in dieser Reihenfolge geliefert.
Gruß
Hallo Daniel,
Also die Spalte enthält irgendwelche Strings.
Letztendlich brauche ich ein "gestaffeltes" Ergebnis:
- falls es eine Zeile gibt, in der die Spalte genauso lautet wie der Suchstring, brauche ich nur diese (LIKE)
- ist dies nicht der Fall brauche ich die zeilen, die so beginnen, wie der suchstring und diese nach länge geordnet.
Du solltest Dir den CASE-Operator ansehen.
z.B. Ich suche in folgenden Zeilen nach hallo
ha
hall
Den zweiten Fall könntest Du mit einem logischen ODER abhandeln.
Da keine Zeile = hallo, werden hall und ha und zwar in dieser Reihenfolge geliefert.
CHAR_LENGTH() sollte Dir dabei helfen - und liefert auch bei UTF-8 das gewünschte Ergebnis im Gegensatz zu LENGTH().
Freundliche Grüße
Vinzenz
Hallo,
vielen Dank für deinen Tip.
Allerdings bin ich echt zu blöd die Doku richtig umzusetzen.
Für was ich den CASE brauche ist mir klar, aber wie Teste ich, ob die Spalte wie der Suchstring beginnt?
Außerdem bekomme ich die CASE-Sache nicht wirlich hin
SELECT spalte
FROM tabelle
WHERE
CASE
WHEN spalte = 'suchstring' THEN spalte = 'suchstring'
ELSE spalte_gleich_dem_anfang_des_suchstrings
Gruß
Hallo,
habe da was, aber das ist ja nicht, was ich möchte, ich möchte ja sofern es eine zeile gibt, in der spalte = 'suchstring' nur dieses Ergebnis erhalten.
Nut falls das der Fall ist alle Zeilen in denen Spalte mit dem Anfang des suchstrings übereinstimmt - das ist natürlich so mit den % nicht das gewünschte, da ich nicht weiß, wie ich es umsetzten kann.
SELECT spalte
FROM tabelle
WHERE
CASE
WHEN spalte = 'suchstring' THEN spalte = 'suchstring'
ELSE spalte LIKE '%suchstring%'
END
ORDER BY CHAR_LENGTH(spalte) DESC
Gruß
Mahlzeit daniel g,
ha4ujk93
ha4ujk9358
ha4uJetzt habe ich als "Suchstring" z.B. ha4ujk.
Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt, also er muss am Anfang stehen, was danach kommt ist mir egal.
Indem Du die passenden Wildcards verwendest:
SELECT foo
FROM tabelle
WHERE foo LIKE 'ha4ujk%'
MfG,
EKKi