MySQL REGEXP + Leerzeichen (\ s)

7

Die Datenbank, mit der ich arbeite, speichert JSON-Einträge in LONGTEXT-Datentypen. Ich möchte Einträge abhängig von den JSON-Daten auswählen können. Hier einige Beispieldaten:

%Vor%

Ich möchte also Daten auswählen, die "4d1dfd2e-7bc1-4303-9c8c-90856e918bb9" enthalten: {"item": {"0": "11"}} Durch Ausfiltern des Whitespace (Tabulatoren, Leerzeichen, neue Zeilen) benutze die REGEXP-Funktion, ich habe dies vergeblich versucht:

%Vor%

Der Regex-Test funktioniert mit Rubular und Regexpal.com, aber MYSQL scheint den \ s * Ausdruck nicht zu mögen. Hat jemand eine bessere Lösung dafür?

    
Tommy Plummer 21.03.2013, 21:09
quelle

3 Antworten

23

Es scheint, dass MySQL die \s -Notation in Regexes nicht unterstützt, nur die [[:space:]] -Notation (wobei [:space:] in einer Zeichenklasse "beliebiges Leerzeichen" bedeutet).

Übrigens, wenn Sie tun brauchen einen umgekehrten Schrägstrich - zum Beispiel, wenn Sie ein literales Sternchen \* benötigen - müssen Sie tatsächlich den umgekehrten Schrägstrich (zB \* ), wie in < a href="http://dev.mysql.com/doc/refman/5.6/en/regexp.html"> §12.5.2 "Reguläre Ausdrücke" des MySQL 5.6 Referenzhandbuch :

  

Hinweis
  Da MySQL die C-Escape-Syntax in Strings verwendet (z. B. " \n " für das Newline-Zeichen), müssen Sie jedes " \ ", das Sie in Ihren REGEXP -Zeichenfolgen verwenden, verdoppeln.

    
ruakh 21.03.2013, 21:15
quelle
0

Verwenden Sie Zeichenfolge ersetzen;

%Vor%

Wenn Ihre Daten Leerzeichen enthalten, funktioniert dies nicht.

    
Lighthart 21.03.2013 21:16
quelle
0

Es ist besser, den json-Typ zu verwenden: SELECT CAST('column' AS JSON) WHERE JSON_EXTRACT(CAST('column' as JSON),'$."4d1dfd2e-7bc1-4303-9c8c-90856e918bb9".item."0"')="11"

    
Crusader 21.03.2017 13:52
quelle

Tags und Links