Was entspricht REGEXP_SUBSTR in mysql?

8

Ich möchte ein Wort aus einer String-Spalte einer Tabelle extrahieren.

%Vor%

Erwartete Ergebnismenge

%Vor%

Die Tabelle hat höchstens 100 Zeilen, die Textlänge beträgt ~ 256 Zeichen und die Spalte hat immer ein order_id vorhanden. Leistung ist also kein Problem.

In Oracle kann ich REGEXP_SUBSTR für dieses Problem verwenden. Wie würde ich das in MySQL lösen?

Bearbeiten 1

Ich verwende LOCATE und SUBSTR, um das Problem zu lösen. Der Code ist hässlich. Zehn Minuten nach dem Schreiben des Codes verfluche ich den Typ, der einen so hässlichen Code geschrieben hat.

Ich habe die REGEXP_SUBSTR-Funktion in MySQL-Dokumenten nicht gefunden. Aber ich hoffe, dass es existiert ..

Antwort auf: Warum kann die Tabelle nicht optimiert werden? Warum werden die Daten so dumm gespeichert?

Das Beispiel, das ich gab, bezeichnet gerade das Problem, das ich zu lösen versuche. Im realen Szenario verwende ich eine DB-basierte Warteschlangensoftware von Drittanbietern zum Ausführen von asynchronen Aufgaben. Die Warteschlange serialisiert das Ruby-Objekt als Text. Ich habe keine Kontrolle über die Tabellenstruktur ODER das Datenformat. Die Aufgaben in der Warteschlange können wiederkehrend sein. In unserem Test-Setup versagen einige wiederkehrende Aufgaben aufgrund veralteter Daten. Ich muss diese Aufgaben löschen, um den Fehler zu vermeiden. Solche Fehler sind nicht üblich, daher möchte ich keine normalisierte Schattentabelle pflegen.

    
Harish Shetty 30.04.2010, 06:17
quelle

3 Antworten

3

Wie Konerak sagte, gibt es kein Äquivalent von REGEXP_SUBSTR in MySql. Sie könnten tun, was Sie brauchen, SUBSTRING Logik verwenden, aber es ist hässlich:

%Vor%

Bearbeiten: Sie können diese benutzerdefinierte Funktion ausprobieren, die Zugriff auf Perl Regex in MySql %Vor%     

Julien Hoarau 30.04.2010, 06:45
quelle
1

Es gibt kein MySQL-Äquivalent. Der MySQL REGEXP kann verwendet werden, um Strings zu vergleichen, aber nicht um sie zu transformieren.

Sie können entweder versuchen, mit gespeicherten Prozeduren und einer Vielzahl von REPLACE / SUBSTRING-Logik zu arbeiten, oder Sie tun es in Ihrer Programmiersprache - was die einfachste Option sein sollte.

Aber sind Sie sicher, dass Ihr Datenformat gut gewählt ist? Wenn Sie die order_id benötigen, wäre es nicht sinnvoll, sie in einer anderen Spalte zu speichern, sodass Sie Indizes, Joins und Ähnliches verwenden können?

    
Konerak 30.04.2010 06:35
quelle
0

oder du kannst das tun und dir die Hässlichkeit ersparen:

%Vor%     
Steven Universe 20.11.2016 19:00
quelle

Tags und Links