S'il vous plaît, pouvez-vous répondre à ma question. Comment supprimer les chiffres de la fin de la chaîne en utilisant SQL ? Par exemple, la chaîne '2Ga4la2009' doit être convertie en 2Ga4la. Le problème est que nous ne pouvons pas les couper car nous ne savons pas combien de chiffres se trouvent à la fin de la chaîne. Meilleures salutations, Galina.
Réponses
Trop de publicités?Cela semble fonctionner :
select left( concat('2Ga4la2009','1'), length(concat('2Ga4la2009','1')) - length(convert(convert(reverse(concat('2Ga4la2009','1')),unsigned),char)))
Le concat('mavaleur', '1') est une protection contre les nombres qui se terminent par des 0.
Le revers le renverse de sorte que le numéro se trouve à l'avant.
Le convertisseur interne transforme la chaîne inversée en un nombre, en supprimant les caractères de fin de chaîne.
La conversion externe transforme la partie numérique en caractères, ce qui permet d'obtenir la longueur.
Vous connaissez maintenant la longueur de la partie numérique, et vous pouvez déterminer le nombre de caractères de la valeur originale à couper avec la fonction "left()".
C'est laid, mais ça marche :-)
Jetez un coup d'oeil à ça : http://www.mysqludf.org/lib_mysqludf_preg/
Et si, pour une raison quelconque, vous ne pouvez pas utiliser l'UDF et ne voulez pas le faire du côté client de la base de données, vous pouvez toujours faire ce qui suit :
-
Trouver la position de la première lettre à partir de la fin (par exemple, le minimum des 25 LOCATE sur le verso de la chaîne)
-
Do LEFT(@string, @string_length - @result_of_step_1)
Vous n'avez pas à effectuer de manipulation particulière dans le cas où il n'y a pas de chiffres à la fin de la chaîne, car dans ce cas, LOCATE renvoie 0.
Cheers