web-dev-qa-db-fra.com

Sous-chaîne MySQL entre deux chaînes

J'ai besoin d'un coup de main pour résoudre un problème avec mon champ de colonne . J'ai besoin d'extraire la chaîne entre ces deux "motifs" de chaînes différents, par exemple:

[... chaîne] contrat = 1234567890123350566076070666 publié = [chaîne ...]

Je veux extraire la chaîne entre 'contrat =' et 'publié ='

En ce moment j'utilise 

SELECT substring(substring_index(licence_key,'contract=',-1),1,40) FROM table

Le problème est que cette chaîne entre les deux n'a pas toujours 40 caractères, elle n'est donc pas de longueur fixe et donc les données qui précèdent et qui suivent. C'est une donnée volatile. 

Savez-vous comment je peux gérer ça?

15
Haohmaru

Il suffit d'utiliser substring_index() deux fois:

SELECT substring_index(substring_index(licence_key, 'contract=', -1),
                       'issued=', 1)
FROM table;
33
Gordon Linoff

Si cette chaîne ne correspond pas, donnez le résultat total.

Si vous souhaitez remplacer, vous pouvez utiliser comme ceci.

UPDATE questions set question= REPLACE(question, '<xml></xml>', '') WHERE question like '%<xml>%';

UPDATE questions set question= REPLACE(question, substring_index(substring_index(question, '<xml>', -1), '</xml>', 1), '') WHERE question like '%<xml>%';
0
Gajanand Pandey