Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak usunąć zduplikowaną wartość oddzieloną przecinkami w jednej kolumnie w MySQL?

Utknąłem w podobnej sytuacji i stwierdziłem, że MySql nie zapewnia żadnej predefiniowanej funkcji, aby rozwiązać ten problem.

Aby przezwyciężyć, stworzyłem UDF, spójrz poniżej na definicję i użycie.

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 ;

Przykładowe użycie:

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

Wynik:

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

Mam nadzieję, że ta pomoc!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa NIE PODOBNIE w MySQL

  2. Doctrine 2 DQL CASE GDY w Count

  3. Jaki jest odpowiednik DATALENGTH() w MySQL?

  4. MySQL VARCHAR(255) UTF8 jest za długi dla klucza, ale maksymalna długość to 1000 bajtów

  5. Wstawienie wartości NOW() w typie danych datetime zwraca 0000-00-00 00:00:00