sql >> Database >  >> RDS >> Mysql

Hoe dubbele door komma's gescheiden waarden in een enkele kolom in MySQL te verwijderen?

Ik bleef in dezelfde situatie zitten en ontdekte dat MySql geen vooraf gedefinieerde functie biedt om dit probleem op te lossen.

Om dit te verhelpen heb ik een UDF gemaakt. Kijk hieronder voor de definitie en het gebruik.

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 ;

Voorbeeldgebruik:

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

Resultaat:

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

Ik hoop dat dit helpt!



  1. Een tussenliggende MySQL- of MariaDB-master vervangen door een Binlog-server met MaxScale

  2. ReplicationManager gooide een uitzondering bij het openen van een verbinding

  3. 10 seconden toevoegen in current_timestamp SQL (Oracle)

  4. Rijdoelen, deel 2:Semi-joins