sql >> Databasteknik >  >> RDS >> Mysql

Hur man tar bort dubbletter av kommaseparerade värden i en enda kolumn i MySQL

Jag fastnade i en liknande situation och upptäckte att MySql inte tillhandahåller någon fördefinierad funktion för att övervinna detta problem.

För att övervinna skapade jag en UDF. Ta en titt nedan på definitionen och användningen.

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 ;

Exempel på användning:

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

Resultat:

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

Hoppas detta hjälper!



  1. Hur kan jag ändra flera tabeller samtidigt i mysql?

  2. Importera shapefiler i postgresql i linux med pgadmin 4

  3. Skapa en ny Oracle-användare och bevilja privilegier:syntax och exempel

  4. Hur man skriver join-förfrågan i Volusion API