Computer >> Máy Tính >  >> Lập trình >> MySQL

Tách một chuỗi và lặp qua các giá trị trong Thủ tục MySQL?

Để tách một chuỗi và lặp qua tất cả các giá trị trong thủ tục MySQL, bạn không cần sử dụng hàm REPLACE (). Để hiểu, trước tiên hãy tạo một thủ tục được lưu trữ và sau đó tạo một bảng và gọi thủ tục được lưu trữ với một số giá trị. Giá trị sẽ được chèn vào bảng.

Truy vấn để tạo một thủ tục được lưu trữ như sau:

mysql> DELIMITER //
mysql> CREATE PROCEDURE SP_SplitString(Value longtext)
   -> BEGIN
   -> DECLARE front TEXT DEFAULT NULL;
   -> DECLARE frontlen INT DEFAULT NULL;
   -> DECLARE TempValue TEXT DEFAULT NULL;
   -> iterator:
   -> LOOP  
   -> IF LENGTH(TRIM(Value)) = 0 OR Value IS NULL THEN
   -> LEAVE iterator;
   -> END IF;
   -> SET front = SUBSTRING_INDEX(Value,',',1);
   -> SET frontlen = LENGTH(front);
   -> SET TempValue = TRIM(front);
   -> INSERT INTO store (allValues) VALUES (TempValue);
   -> SET Value = INSERT(Value,1,frontlen + 1,'');
   -> END LOOP;
   -> END //
Query OK, 0 rows affected (0.22 sec)
mysql> DELIMITER ;

Bây giờ, hãy tạo một bảng lưu trữ giá trị của thủ tục đã lưu trữ. Truy vấn để tạo bảng.

mysql> CREATE TABLE store(
   -> Id int NOT NULL AUTO_INCREMENT,
   -> allValues varchar(30),
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.63 sec)

Hiển thị tất cả các bản ghi từ bảng. Truy vấn như sau:

mysql> select *from store;
Empty set (0.00 sec)

Ban đầu chúng tôi không có bất kỳ bản ghi nào trong bảng. Hãy để chúng tôi gọi thủ tục được lưu trữ bằng lệnh CALL. Truy vấn như sau:

mysql> call SP_SplitString('Hi,Hello,Good Morning,Bye');
Query OK, 1 row affected (1.02 sec)

Sau khi gọi thủ tục được lưu trữ ở trên, chúng ta hãy kiểm tra một lần nữa các bản ghi bảng. Truy vấn để hiển thị tất cả các bản ghi từ bảng như sau:

mysql> select *from store;

Sau đây là kết quả:

+----+--------------+
| Id | allValues    |
+----+--------------+
|  1 | Hi           |
|  2 | Hello        |
|  3 | Good Morning |
|  4 | Bye          |
+----+--------------+
4 rows in set (0.00 sec)