Je veux tout récupérer avant la dernière occurrence d'un caractère spécifique d'une colonne.
SUBSTRING_INDEX avec une valeur négative fonctionne bien pour la séparation mais renvoie la partie de la chaîne que je souhaite supprimer. Par exemple, considérez une colonne comme
UPDATE table1 SET Col1=REPLACE(Col1,SUBSTRING_INDEX(Col1, '.', -1),'')
SUBSTRING_INDEX (Col1, '.', -1) renvoie quatrième , mais je veux obtenir
first. second. third.
En fait, je veux mettre à jour le même col en supprimant quoi que ce soit après la dernière occurrence de . . En d'autres termes, je souhaite supprimer la partie SUBSTRING_INDEX (Col1, '.', -1) , mais je ne peux pas simplement utiliser REPLACE comme
first. second. third. fourth
car cela peut se produire dans d'autres parties de la chaîne.
3 Réponses :
Voici une astuce pour faire ceci, en utilisant la fonction REVERSE :
UPDATE yourTable
SET col =
REVERSE(SUBSTRING(REVERSE(col), INSTR(REVERSE(col), '.')))
L'idée ici est d'inverser la chaîne, puis d'utiliser INSTR code> pour trouver la position du dernier point (maintenant le premier). Ensuite, nous sous-passons de la position au début, puis inversons à nouveau.
Vous pouvez utiliser les fonctions left () et Locate ()
val first. second. third.
OUTPUT:
UPDATE table1 SET Col1= left(col1, locate(SUBSTRING_INDEX(col1, '.', -1),col1))
désolé, cela ne fonctionne pas comme mon exemple REPLACE . Il LOCATE () le premier SUBSTRING_INDEX (col1, '.', -1) . Ainsi, cela ne fonctionne pas pour en premier. Quatrième. troisième. quatrième .
Je n'utiliserais pas reverse () . Au lieu de cela:
UPDATE table1
SET Col1 = LEFT(col1, LENGTH(col1) - LENGTH(SUBSTRING_INDEX(Col1, '.', -1)) - 1);
Quel est le problème avec votre code? ça semble être du travail
@ D-Shih cela ne fonctionne pas si la colonne est
en premier. Quatrième. troisième. quatrième.