Je souhaite extraire un mot d'une colonne de chaîne d'une table.Quel est l'équivalent de REGEXP_SUBSTR dans mysql?
description
===========================
abc order_id: 2 xxxx yyy aa
mmm order_id: 3 nn kk yw
Résultat attendu mis
order_id
===========================
2
3
Table sera au plus ont 100 lignes, la longueur du texte est ~ 256 omble chevalier et la colonne a toujours un order_id
présent. Donc, la performance n'est pas un problème.
Dans Oracle, je peux utiliser REGEXP_SUBSTR
pour ce problème. Comment pourrais-je résoudre cela dans MySQL?
Modifier 1
J'utilise LOCATE et SUBSTR pour résoudre le problème. Le code est moche. Dix minutes après avoir écrit le code, je maudis le gars qui a écrit un code si moche.
Je n'ai pas trouvé la fonction REGEXP_SUBSTR dans les documents MySQL. Mais j'espère qu'il existe ..
Réponse à: Pourquoi la table ne peut-elle être optimisée? Pourquoi les données sont-elles stockées de manière si bête?
L'exemple que j'ai donné indique simplement le problème que j'essaie de résoudre. Dans un scénario réel, j'utilise un logiciel de mise en file d'attente de tierce partie basé sur DB pour exécuter des tâches asynchrones. La file d'attente sérialise l'objet Ruby en tant que texte. Je n'ai aucun contrôle sur la structure de la table OU le format de données. Les tâches dans la file d'attente peuvent être récurrentes. Dans notre configuration de test, certaines tâches récurrentes échouent à cause de données périmées. Je dois supprimer ces tâches pour éviter l'erreur. De telles erreurs ne sont pas communes, par conséquent je ne veux pas maintenir une table d'ombre normalisée.
C'est ce que je fais. +1 pour avoir pris le temps d'écrire ceci .. –
La réponse éditée pour utiliser CHAR_LENGTH() au lieu de LENGTH(), ce dernier renvoie la taille occupée en octets, et non la longueur de la chaîne. Vous aurez des problèmes avec UTF8 par exemple –