Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате phpMyAdmin

  2. LINQ за Java инструмент

  3. Как да заявя sql с активен запис за дати между определени времена

  4. Вложени класове - CustomRowMapper !! Вече не е проблем!! - Част 1

  5. Защо CONCAT() не е по подразбиране на набор от знаци по подразбиране в MySQL?