Je dois tout extraire après le dernier '=' ( http://www.domain.com?query=blablabla -> blablabla) mais cette requête renvoie les chaînes entières. Où est-ce que je me suis trompé ici?
SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference))
FROM ps_product
select SUBSTRING_INDEX(supplier_reference,'=',-1) from ps_product;
Veuillez utiliser http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php pour plus de références.
Essayez ceci (cela devrait fonctionner s'il y a plusieurs caractères '=' dans la chaîne):
SELECT RIGHT(supplier_reference, (CHARINDEX('=',REVERSE(supplier_reference),0))-1) FROM ps_product
Essayez ceci dans MySQL.
right(field,((CHAR_LENGTH(field))-(InStr(field,','))))
En MySQL, cela fonctionne s'il y a plusieurs caractères '=' dans la chaîne.
SUBSTRING(supplier_reference FROM (LOCATE('=',supplier_reference)+1))
Il retourne la sous-chaîne après (+1) après avoir trouvé le premier =
J'ai travaillé sur quelque chose de similaire et après quelques essais et échecs, j'ai trouvé ceci:
Exemple: STRING-TO-TEST-ON = 'ab, cd, ef, gh'
Je voulais tout extraire après la dernière occurrence de "," (virgule) de la chaîne ... donnant ainsi "gh".
Ma requête est:
SELECT SUBSTR('ab,cd,ef,gh' FROM (LENGTH('ab,cd,ef,gh') - (LOCATE(",",REVERSE('ab,cd,ef,gh'))-1)+1)) AS `wantedString`
Maintenant laissez-moi essayer d’expliquer ce que j’ai fait ...
Je devais trouver la position du dernier "," dans la chaîne et calculer la longueur de wantedString, en utilisant LOCATE(",",REVERSE('ab,cd,ef,gh'))-1
en inversant la chaîne initiale, je devais trouver la première occurrence de "," dans la chaîne ... qui n'était pas Difficile de faire ... et ensuite -1 pour trouver réellement la longueur de la chaîne sans le ",".
calcule la position de ma chaîne wanted en soustrayant la longueur de la chaîne que j'ai calculée au 1er pas de la longueur de la chaîne initiale:
LONGUEUR ('ab, cd, ef, gh') - (LOCATE (",", REVERSE ('ab, cd, ef, gh')) - 1) +1
J'ai (+1) parce que j'ai réellement besoin de la position de la chaîne après le dernier "," .. et ne contenant pas le ",". J'espère que cela a du sens.
Je n'ai pas testé la requête sur des chaînes de grande taille, donc je ne sais pas à quel point c'est lent. Donc, si quelqu'un le teste réellement sur une grosse chaîne, je serais très heureux de connaître les résultats.
Pour SQL Management studio, j'ai utilisé une variante de la réponse de BWS. Cela donne les données à la droite de '=', ou NULL si le symbole n'existe pas:
CASE WHEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN
0 ELSE CHARINDEX('=', supplier_reference) -1 END)) <> '' THEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN
0 ELSE CHARINDEX('=', supplier_reference) -1 END)) ELSE NULL END