文字列を分割しようとしている場合は、このように1と2をハードコーディングできます。現在、このテーブルには1と2が含まれるようにハードコーディングされているため、数値テーブルで1と2を取得する必要はありません。
SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 1), ' ', -1),
@U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 2), ' ', -1);
しかし、SUBSTRING_INDEX()を2回呼び出す必要がないことに気づきました。これも機能します
SET @V = SUBSTRING_INDEX(new.Vu, ' ', 1),
@U = SUBSTRING_INDEX(new.Vu,' ', -1);
更新 コメントを見た後、なぜテーブルnumbers
を作成したかがわかります したがって、トリガーは次のようになります。最初にテーブルnumbers
を作成します。 1から10までのn個の値(行に分割できるフィールドの最大数)を含む行が含まれています。次に、numbers
から選択します。 ここで、n個の値は<=数値のフィールド数です。次に、SUBSTRING_INDEX()関数を適用して、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