Quel est l'équivalent de REGEXP_SUBSTR dans mysql?
Je veux extraire un mot à partir d'une chaîne de colonne d'une table.
description
===========================
abc order_id: 2 xxxx yyy aa
mmm order_id: 3 nn kk yw
Résultat attendu de l'ensemble
order_id
===========================
2
3
Table au plus 100 lignes, la longueur du texte est ~256 char et de la colonne a toujours une order_id
présent. Si la performance n'est pas un problème.
Dans Oracle, je peux utiliser REGEXP_SUBSTR
pour ce problème. Comment pourrais-je résoudre ce dans MySQL?
Edit 1
Je suis à l'aide de LOCALISER et de SUBSTR pour résoudre le problème. Le code est moche. Dix minutes après avoir écrit le code, je suis en train de maudire le gars qui a écrit une telle laideur code.
Je n'ai pas trouvé la REGEXP_SUBSTR fonction MySQL docs. Mais je suis en espérant que cela existe..
Réponse à : Pourquoi je ne peux pas la table être optimisé? Pourquoi les données sont stockées dans un tel mutisme de la mode?
L'exemple que j'ai donné juste dénote le problème, je suis en train de résoudre. En vrai scénario, je suis à l'aide d'un DB en fonction de la 3e partie de files d'attente de logiciels pour l'exécution de tâches asynchrones. La file d'attente sérialise le Rubis de l'objet en tant que texte. Je n'ai pas de contrôle sur la structure de la table OU le format de données. Les tâches dans la file d'attente peut être récurrent. Dans notre configuration de test, certaines tâches récurrentes sont un échec en raison de données obsolètes. J'ai supprimer ces tâches pour éviter l'erreur. De telles erreurs ne sont pas communs, donc je ne veux pas de maintenir un normalisée de l'ombre de la table.
OriginalL'auteur Harish Shetty | 2010-04-30
Vous devez vous connecter pour publier un commentaire.
Oui, à partir de MySQL 8.0 il est pris en charge. Les Expressions Régulières:
OriginalL'auteur Lukasz Szozda
Comme Konerak dit, il n'existe pas d'équivalent de REGEXP_SUBSTR dans MySql. Vous pourriez faire ce que vous avez besoin de l'aide de sous-CHAÎNE de la logique, mais qu'il est laid :
Edit:, Vous pouvez essayer ce fonction définie par l'utilisateur fournissant l'accès à l'expression rationnelle perl MySql
Édité réponse à utiliser CHAR_LENGTH() à la place de la LONGUEUR(), le dernier est de retour occupés taille, en Octets, et non pas la longueur de la chaîne. Vous aurez des ennuis avec l'UTF8 par exemple
OriginalL'auteur Julien Hoarau
Il n'y a pas de MySQL équivalent. La base de REGEXP peut être utilisée pour la correspondance des chaînes, mais pas pour les transformer.
Vous pouvez essayer de travailler avec des procédures stockées et des beaucoup de les REMPLACER ou les sous-CHAÎNE de la logique, ou de le faire dans votre langage de programmation - qui devrait être l'option la plus facile.
Mais êtes-vous sûr que vos données le format est bien choisi? Si vous avez besoin de la order_id, ne serait-il pas logique de le stocker dans une autre colonne, de sorte que vous pouvez mettre de l'index, utilisez rejoint et l'aime?
Lire ma mise à jour de question pour la raison pourquoi j'ai de telles données.
OriginalL'auteur Konerak
ou vous pouvez le faire et vous épargner la laideur :
OriginalL'auteur Steven Universe