Sven Rautenberg: Reguläre Ausdrücke in SQL / Fehler mit mysql_num_row

Beitrag lesen

Moin!

Wenn ich diesen Befehl über die mysql Konsole absetze:
SET @var_regex = REPLACE('i2966.142', 'i', '2%'); SELECT id, sp_id, hostname, sp_location_town, sp_location_street, system_code FROM sheets WHERE sp_id LIKE '@var_regex';

Bekomme ich die gewünschte Rückgabe.

Ich frage mich, warum zum Henker du etwas, was man problemlos in einem einzigen Query hinkriegen könnte, zwingend auf zwei Querys aufteilen willst.

Dein SET-Statement macht absolut nichts magisches. Du hast einen fixen String, in dem du einen fixen Wert suchst und ihn durch einen fixen anderen Wert ersetzt. Warum das? Warum nimmst du nicht einfach das sich zwingend und garantiert immer wieder identische Ergebnis dieser Operation und verwendest es direkt?

Wenn du im String 'i2966.142' das i durch '2%' ersetzt, kommt garantiert immer '2%2966.142' heraus.

Und schon ergibt sich der Query aus dem zweiten Teil, und du hast kein Problem mehr.

Außer vielleicht: Die Suche mit LIKE sieht das % als Platzhalter für null bis unendlich viele Zeichen. Aber man kann sowas auch escapen und dann nach genau einem Prozentzeichen suchen. Das wiederum würde man dann aber besser hinkriegen, wenn man nicht LIKE verwendet, sondern = für den Vergleich.

- Sven Rautenberg