jeśli próbujesz tylko wydzielić ciągi, możesz po prostu zakodować 1 i 2 w tym miejscu w ten sposób i nie ma potrzeby chwytania 1 i 2 w tabeli liczb, ponieważ ta tabela jest obecnie zakodowana na stałe tak, aby zawierała 1 i 2.
SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 1), ' ', -1),
@U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 2), ' ', -1);
ale potem zauważyłem, że nie musisz nawet dwukrotnie wywoływać SUBSTRING_INDEX() .. to też działa
SET @V = SUBSTRING_INDEX(new.Vu, ' ', 1),
@U = SUBSTRING_INDEX(new.Vu,' ', -1);
AKTUALIZUJ po obejrzeniu Twojego komentarza rozumiem, dlaczego chciałeś utworzyć tabelę numbers
więc twój wyzwalacz będzie wyglądał mniej więcej tak.Najpierw utwórz tabelę numbers
który zawiera wiersze, które mają n wartości od 1 do 10 (możliwa maksymalna liczba pól do podziału na wiersze). Następnie wybierasz z numbers
gdzie n wartości to <=liczba pól w Twojej liczbie. Następnie zastosuj funkcje SUBSTRING_INDEX(), aby uzyskać pole na pozycji n.
create table numbers
select 1 as n
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 10;
CREATE TRIGGER `edit2` AFTER INSERT
ON `table1`
FOR EACH ROW BEGIN
INSERT INTO table2 (number,player,team,position)
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.number,' ',n),' ',-1) as number,
NEW.player as player,
SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.team,', ',n),', ',-1) as team,
SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.position,' ',n),' ',-1) as position
FROM
numbers n
WHERE LENGTH(NEW.number)
- LENGTH(REPLACE(NEW.number,' ',''))
+ 1 >= n.n;
END
sqlfiddle, aby zobaczyć wyzwalacz w akcji