Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pętla w wyzwalaczu z wartościami oddzielonymi przecinkami mysql

Najpierw dodaj tę procedurę do swojej bazy danych

http://forge.mysql.com/tools/tool.php?id =4 (edytuj 2020-09-09, link nie działa, ale maszyna wracająca znalazła źródło)

DELIMITER //
 
DROP PROCEDURE IF EXISTS split_string //
CREATE PROCEDURE split_string (
    IN input TEXT
    , IN `delimiter` VARCHAR(10) 
) 
SQL SECURITY INVOKER
COMMENT 
'Splits a supplied string using using the given delimiter, 
placing values in a temporary table'
BEGIN
    DECLARE cur_position INT DEFAULT 1 ;
    DECLARE remainder TEXT;
    DECLARE cur_string VARCHAR(1000);
    DECLARE delimiter_length TINYINT UNSIGNED;
 
    DROP TEMPORARY TABLE IF EXISTS SplitValues;
    CREATE TEMPORARY TABLE SplitValues (
        value VARCHAR(1000) NOT NULL PRIMARY KEY
    ) ENGINE=MyISAM;
 
    SET remainder = input;
    SET delimiter_length = CHAR_LENGTH(delimiter);
 
    WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO
        SET cur_position = INSTR(remainder, `delimiter`);
        IF cur_position = 0 THEN
            SET cur_string = remainder;
        ELSE
            SET cur_string = LEFT(remainder, cur_position - 1);
        END IF;
        IF TRIM(cur_string) != '' THEN
            INSERT INTO SplitValues VALUES (cur_string);
        END IF;
        SET remainder = SUBSTRING(remainder, cur_position + delimiter_length);
    END WHILE;
 
END //

Podzieli dowolny ciąg na wiersze w tabeli tymczasowej.

Wyślij kolumnę z Tabeli1 do tej procedury i użyj wynikowej tabeli tymczasowej, aby wstawić wartości do Tabeli3




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjaśnienie MySQL IFNULL()

  2. MySQL - SUMA grupy różnic czasowych

  3. projekt tabeli + pytanie SQL

  4. Mariadb - Każda partia wydłużonego czasu wykonania wkładki stopniowo się wydłuża

  5. Jak wstawić wiele wierszy do bazy mysql na raz z przygotowanymi zestawieniami?