1
votes

Refactoriser la chaîne dans le champ MySQL

J'ai cherché et je n'ai pas trouvé quelque chose pour résoudre ce problème. Je veux mettre à jour le tableau suivant:

+--------------------+
| description        |
+--------------------+
| Interna_172_16_0   |
| Interna_172_16_1   |
| Interna_172_16_2   |
| Interna_172_16_3   |
| Interna_172_16_4   |
+--------------------+

Avec la même chaîne, mais en soustrayant un du dernier numéro fe:

+--------------------+
| description        |
+--------------------+
| Interna_172_16_1   |
| Interna_172_16_2   |
| Interna_172_16_3   |
| Interna_172_16_4   |
| Interna_172_16_5   |
+--------------------+

Comment peut J'accomplis cela? désolé pour le mauvais anglais, merci !!


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser:

update yourtable
set description = 
  concat(left(description, length(description)-1), right(description,1)-1)
where right(description,1) regexp '[1-9]+'


0 commentaires

0
votes

Si vous avez besoin d'une instruction select:

| description      |
| ---------------- |
| Interna_172_16_0 |
| Interna_172_16_1 |
| Interna_172_16_2 |
| Interna_172_16_3 |
| Interna_172_16_4 |

Voir le démo .
Si vous souhaitez mettre à jour le tableau:

update tablename
set description = concat(
  left(description, length(description) - length(substring_index(description, '_', -1))),
  substring_index(description, '_', -1) - 1
);

Voir le démo .

Résultats:

select concat(
  left(description, length(description) - length(substring_index(description, '_', -1))),
  substring_index(description, '_', -1) - 1
) description                                                         
from tablename

Ce code suppose que toutes les descriptions se terminent par une chaîne numérique.


0 commentaires

0
votes

Vous pouvez le faire. Le nom de la table doit être adapté

UPDATE Table1
SET description = CONCAT(SUBSTRING_INDEX(`description`, '_', 3)
                   ,'_',SUBSTRING_INDEX(`description`, '_', -1) -1);


0 commentaires