2016-12-22 5 views
0

Ich versuche derzeit, ein Muster aus einer Zeichenfolge mit MySQL zu extrahieren, aber leider nicht geschafft, das angestrebte Ergebnis noch zu erreichen. Deshalb würde ich gerne etwas Unterstützung von dir bekommen.SQL-Extrakt Muster aus String mit RegExp

Der String sieht wie folgt aus:

AB3530A/AB476-1

Ich will nur diesen Teil extrahieren:

AB476

ich schon versuchte die folgende RegExp:

[A-Z]{2}[0-9]{3} 

die zurückgegeben:

AB476-

ich auch versucht:

[A-Z]{2}[0-9]{3}([^0-9]|$) 

die AB353 und AB476 bei http://regexr.com/ zurückgegeben, sondern nur zurück AB353 in MariaDB.

Kann jemand nur ohne irgendwelche zusätzlichen Zeichen extrahieren?

Vielen Dank im Voraus.

Mit freundlichen Grüßen

+1

MySQL unterstützt das nicht. Sie können einen Ausdruck nur mit einem Muster vergleichen. Und das ist es. Lesen Sie mehr unter http://dev.mysql.com/doc/refman/5.7/en/regexp.html –

+0

Sehen Sie sich diese http://dev.mysql.com/doc/refman/5.7/en/regexp an. html – user1080381

+0

Ich verwende die Funktion REGEXP_SUBSTR, die eine Zeichenfolge zurückgibt. Das funktioniert gut. Ich habe es einfach nicht geschafft, die richtige Saite zurückzugeben. – ShortDive

Antwort

1

Diese link dass 10.0.5 seit seiner Version zeigt, MariaDB Perl kompatibel regexp („PCRE“) unterstützt.

Dieses Konstrukt sollte dann funktionieren SELECT REGEXP_SUBSTR(your_string, '\\b[A-Z]{2}\\d{3}\\b');.

(\b ist "Wortgrenze")

SELECT REGEXP_SUBSTR('AB3530A/AB476-1','\\b[A-Z]{2}\\d{3}\\b');'AB476'

NB zurückkehren sollte: statt [A-Z], die nur für ASCII-Zeichen erlaubt, Sie \\p{Lu} verwenden könnte, die „jedes Zeichen als ein Mittel getaggt Buchstabe nach Unicode und nur die Großbuchstaben ". Aber ich denke, wird in Ihrem Fall ausreichen.

+0

Sxilderik, vielen Dank. Das war, was ich suchte, leider scheint MariaDB REGEXP_SUBSTR es nicht zu unterstützen. – ShortDive

+0

Wenn Ihre Version von MariaDB mindestens 10.0.5 ist, sollte meine bearbeitete Antwort funktionieren. – Sxilderik

+0

Sie sind ein Genie. Es klappt! Ich danke dir sehr. – ShortDive

0

ShortDive!

Statt Regex können Sie dies versuchen:

SELECT SUBSTR('AB3530A/AB476-1',9,5) constant_length 
    , SUBSTRING_INDEX(SUBSTRING_INDEX('AB3530A/AB476-1','/',-1),'-',1) variable_length 
+0

Danke, aber das ist nicht was ich suche, da die Zeichenfolge variieren kann und auch die Position der Zeichenfolge zu extrahieren und Zeichen sowie. Also möchte ich definitiv RegExp verwenden. – ShortDive

+0

@ShortDive Dann können Sie kein [minimales, vollständiges und verifizierbares Beispiel] erstellen (http://stackoverflow.com/help/mcve). –

+0

Grundsätzlich versuche ich das Muster 2 Buchstaben, 3 Ziffern zu extrahieren. Dieses Muster kann überall auftreten, nicht nur nach bestimmten Zeichen. Daher könnte die Zeichenfolge auch so aussehen: HG346A-TX/CG234-1-PVT (CG234 sollte extrahiert werden) oder so ZT234P/EW345-4-34 (EW345 sollte extrahiert werden). – ShortDive