Ich habe folgende Situation. Ich muss reguläre Ausdrücke aus der Beschreibung mit MySQL ableiten. Beschreibung:
Lorem D9801 ipsum dolor sitzen amet
Wobei D9801 REGEXP ist. Jede Beschreibung mit starkem Text hat einen anderen Inhalt, aber mein regulärer Ausdruck sollte so aussehen: REGEXP 'D [[: digit:]] {4}'
REGEXP hat immer "D" am Anfang und "xxxx" - 4 Ziffern am Ende: Dxxxx
Ich weiß, dass REGEXP nur den Wert true / false zurückgibt, aber wie kann ich abfragen, ob nur der Wert 'D9801' zurückgegeben wird?
Ich habe so etwas ausprobiert:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Ich weiß, dass es falsch ist, also versuche ich Folgendes:
SELECT
id,
SUM(description REGEXP 'D[[:digit:]]{4}') AS matches,
CASE
WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN
SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
ELSE 'Brak schematu'
END AS show_substr FROM ps_description GROUP BY id;
Aber wie finde ich die Position von RegExp?
Ich habe von UDF gehört, kann es aber nicht verwenden. Ich verwende OVH-Hosting.
mysql
regular-expression
Marek Andrzejak
quelle
quelle
Antworten:
Dazu müsste die Syntax
LOCATE
und verwendet werdenSUBSTRING
, um die Informationen aus der Zeichenfolge abzurufen. Die grundlegende Locate-Syntax, die Sie benötigen würden, wird hier erklärt .LOCATE (Suche nach str, str, [Position])
Während die Teilzeichenfolge-Funktion, die Sie benötigen, hier erklärt wird
SUBSTRING (str, pos, len)
Die einfachere Art, dies anzuzeigen, besteht darin, sich den Teilstring als folgenden SUBSTRING vorzustellen (str FROM pos FOR len).
Die Systemsteuer, mit der ich das zweite Wort abgerufen habe, ist unten angegeben. Ich habe die Leerzeichen ausgenutzt, die sich ständig um das zweite Wort befinden, das Sie extrahieren möchten.
quelle
Leider gibt die reguläre Ausdrucksfunktion von MySQL je nach Vorhandensein oder Nichtvorhandensein des Ausdrucks true, false oder null zurück.
Der Trick, um das gewünschte Verhalten zu erzielen, besteht darin, zu bestimmen, welcher Teilstring mit dem gewünschten Zeichen beginnt, die richtige Länge hat und von einer Zahl gefolgt wird. Eine Reihe von substring_index-Funktionen wird verwendet, um die Zeichenfolge zu extrahieren ...
quelle