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

Jak odstranit duplicitní hodnotu oddělenou čárkou v jednom sloupci v MySQL

Uvízl jsem v podobné situaci a zjistil jsem, že MySql neposkytuje žádnou předdefinovanou funkci k překonání tohoto problému.

Abych to překonal, vytvořil jsem UDF, podívejte se prosím níže na definici a použití.

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 ;

Ukázka použití:

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

Výsledek:

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

Doufám, že to pomůže!



  1. MySQL odstraňuje nenumerické znaky pro porovnání

  2. Jak mohu dotazovat hodnotu ve sloupci SQL Server XML

  3. postgresql sekvence nextval ve schématu

  4. Postgres UNIQUE CONSTRAINT pro pole