web-dev-qa-db-fra.com

Deuxième (ou troisième) index de MySQL en chaîne

Quel serait le moyen le plus simple de localiser l'index du troisième espace dans une chaîne.

Mon objectif est de sortir CCC de cette liste: AAAA BBBB CCCC DDDD EEE. où A et B et D sont de longueur fixe et C est de longueur variable, E F G est facultatif.

En Java, j'utiliserais indexof, avec un point de départ égal à 10, ce qui me donnerait le troisième espace, mais il semble que je ne peux pas le faire avec MySQL. J'ai donc pensé que je pourrais peut-être trouver un "troisième index de" fonction?

17
George Bailey

Vous voudriez utiliser la fonction SUBSTRING_INDEX comme ceci

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(field, ' ', 3), ' ', -1)
FROM table

L'appel de fonction interne vous amènerait à AAAA BBBB CCCC tandis que l'appel de fonction externe réduirait cela à juste CCCC.

43
Mike Brant

Vous pouvez utiliser SUBSTRING_INDEX .

3
Kermit

Généralement, vous pouvez sélectionner le mot nth dans une chaîne en utilisant:

SET @N = 3; -- 3rd Word
SET @delimiter = ' ';
SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(words, @delimiter, @N), @delimiter, -1)
FROM
  my_table
0
Nae