Đây là câu hỏi khá giống với Mysql có thể chia cột không?
MySQL không có chức năng chia chuỗi vì vậy bạn phải thực hiện các giải pháp thay thế. Bạn có thể thực hiện bất kỳ điều gì với dữ liệu sau khi chia nhỏ dữ liệu bằng một trong các phương pháp được liệt kê trên trang câu trả lời ở trên.
Bạn có thể lặp lại hàm tùy chỉnh đó và ngắt khi nó trả về trống, bạn sẽ phải chơi và học một số cú pháp (hoặc ít nhất là tôi muốn) nhưng cú pháp cho vòng lặp FOR trong mysql là ở đây: http://www.roseindia.net/sql/mysql-example/for.shtml
Bạn có thể lặp lại nó, tăng dần vị trí trong hàm bên dưới:
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
(Tín dụng: https://blog.fedecarg.com / 2009/02/22 / mysql-split-string-function / )
Mà sẽ trả về '' nếu không tìm thấy kết quả phù hợp nào, vì vậy hãy ngắt vòng lặp nếu không tìm thấy kết quả phù hợp nào. Điều này sẽ cho phép bạn chỉ phân tích cú pháp mysql trên chuỗi phân tách và chạy các truy vấn chèn vào bảng tạm thời. Nhưng người đàn ông tại sao không chỉ sử dụng một ngôn ngữ kịch bản như php cho loại công việc đó? :(
Mã cho cú pháp vòng lặp:
DELIMITER $$
CREATE PROCEDURE ABC(fullstr)
BEGIN
DECLARE a INT Default 0 ;
DECLARE str VARCHAR(255);
simple_loop: LOOP
SET a=a+1;
SET str=SPLIT_STR(fullstr,"|",a);
IF str='' THEN
LEAVE simple_loop;
END IF;
#Do Inserts into temp table here with str going into the row
insert into my_temp_table values (str);
END LOOP simple_loop;
END $$