sql >> Databáze >  >> RDS >> Mysql

MySQL Oddělení řetězců operátorem čárkou

Dostal jsem odpověď

Nejprve vytvořte novou funkci

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, '');

Poté vytvořte uloženou proceduru

DELIMITER ;;
CREATE PROCEDURE Split(in fullstr varchar(255))
BEGIN
    DECLARE a INT Default 0 ;
    DECLARE str VARCHAR(255);

    DROP TABLE IF EXISTS my_temp_table;
    CREATE temporary TABLE my_temp_table(ID INT AUTO_INCREMENT NOT NULL, description text, primary key(ID));

    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 (description) values (str);
   END LOOP simple_loop;
   select * from my_temp_table;
END

Poté, když to zavolám pomocí call Split('asas,d,sddf,dfd'); dává mi to výstup, který chci.

Děkujeme za každý návrh.



  1. Zkouška tipy a rady pro správu Azure SQL Database (DP-300)

  2. LAST_INSERT_ID() vždy vrací 0 (RMySQL) - samostatný problém s připojením

  3. Efektivní způsob aktualizace/naplnění databáze mysql pomocí externího XML

  4. Preferovaný způsob ukládání hesel v databázi