sql >> データベース >  >> RDS >> Mysql

MySQLの単一の列で重複するカンマ区切り値を削除する方法

    私は同様の状況に固執し、MySqlがこの問題を克服するための事前定義された関数を提供していないことを発見しました。

    私がUDFを作成したことを克服するために、定義と使用法について以下をご覧ください。

    DROP FUNCTION IF EXISTS `get_unique_items`;
    DELIMITER //
    CREATE FUNCTION `get_unique_items`(str varchar(1000)) RETURNS varchar(1000) CHARSET utf8
    BEGIN
    
            SET @String      = str;
            SET @Occurrences = LENGTH(@String) - LENGTH(REPLACE(@String, ',', ''));
            SET @ret='';
            myloop: WHILE (@Occurrences > 0)
            DO 
                SET @myValue = SUBSTRING_INDEX(@String, ',', 1);
                IF (TRIM(@myValue) != '') THEN
                    IF((LENGTH(@ret) - LENGTH(REPLACE(@ret, @myValue, '')))=0) THEN
                            SELECT CONCAT(@ret,@myValue,',') INTO @ret;
                    END if;
                END IF;
                SET @Occurrences = LENGTH(@String) - LENGTH(REPLACE(@String, ',', ''));
                IF (@occurrences = 0) THEN 
                    LEAVE myloop; 
                END IF;
                SET @String = SUBSTRING(@String,LENGTH(SUBSTRING_INDEX(@String, ',', 1))+2);
            END WHILE;    
    SET @ret=concat(substring(@ret,1,length(@ret)-1), '');
    return @ret;
    
    END //
    DELIMITER ;
    

    使用例:

    SELECT get_unique_items('2,2,2,22,2,3,3,3,34,34,,54,5,45,,65,6,5,,67,6,,34,34,2,3,23,2,32,,3,2,,323') AS 'Items';
    

    結果:

    2,22,3,34,54,45,65,67,23,32,323
    

    この助けを願っています!



    1. 日、週、月、年ごとの統計を保持するためのデータベース構造

    2. Flask、Connexion、SQLAlchemyを使用したPython REST API –パート2

    3. LOAD DATA INFILEはYYYYMMDDをYYYY-MM-DDに簡単に変換しますか?

    4. Oracle SQL Developerで表スペースをチェックする方法は?