J'ai la situation suivante. Je dois sous-chaîne l'expression régulière de la description en utilisant MySQL. La description:
Lorem D9801 ipsum dolor sit amet
Où D9801 est REGEXP. Chaque description textuelle forte a un contenu différent, mais mon expression rationnelle devrait ressembler à ceci: REGEXP 'D [[: digit:]] {4}'
REGEXP a toujours "D" au début et "xxxx" - 4 chiffres à la fin: Dxxxx
Je sais que le REGEXP ne renvoie que la valeur vraie / fausse, mais comment puis-je faire une requête pour renvoyer uniquement la valeur 'D9801'?
J'ai essayé quelque chose comme ça:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Je sais que c'est faux, alors j'essaye avec ceci:
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;
Mais comment trouver la position de l'expression rationnelle?
J'ai entendu parler d'UDF mais je ne peux pas l'utiliser, j'utilise l'hébergement OVH.
la source
Réponses:
Cela devrait utiliser la syntaxe
LOCATE
etSUBSTRING
pour extraire les informations de la chaîne. La syntaxe de localisation de base dont vous auriez besoin est expliquée ici .LOCATE (recherche str, str, [position])
Alors que la fonction de sous-chaîne dont vous avez besoin est expliquée ici
SUBSTRING (str, pos, len)
La façon la plus simple de voir cela est de considérer la sous-chaîne comme la sous-chaîne suivante (str FROM pos FOR len)
La syntaxe que j'ai utilisée pour obtenir le deuxième mot est ci-dessous, j'ai profité des espaces qui sont constamment autour du deuxième mot que vous essayez d'extraire.
la source
Malheureusement, la fonction d'expression régulière de MySQL renvoie true, false ou null selon que l'expression existe ou non.
L'astuce pour effectuer le comportement souhaité consiste à déterminer quelle sous-chaîne commence par le caractère qui vous intéresse, a la bonne longueur et est suivie d'un nombre. Une série de fonctions substring_index sont utilisées pour extraire la chaîne ...
la source