Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 프로시저에서 값을 통해 문자열과 루프를 분할하시겠습니까?

<시간/>

문자열을 분할하고 MySQL 프로시저의 모든 값을 반복하려면 REPLACE() 함수를 사용할 필요가 없습니다. 이해하려면 먼저 저장 프로시저를 만든 다음 테이블을 만들고 일부 값을 사용하여 저장 프로시저를 호출합니다. 값이 테이블에 삽입됩니다.

저장 프로시저를 생성하는 쿼리는 다음과 같습니다.

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 ;

이제 저장 프로시저의 값을 저장하는 테이블을 만듭니다. 테이블 생성 쿼리입니다.

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

테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.

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

처음에는 테이블에 레코드가 없습니다. CALL 명령을 사용하여 저장 프로시저를 호출해 보겠습니다. 쿼리는 다음과 같습니다.

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

위의 저장 프로시저를 호출한 후 테이블 레코드를 다시 한 번 확인해보자. 테이블의 모든 레코드를 표시하는 쿼리는 다음과 같습니다.

mysql> select *from store;

다음은 출력입니다.

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