Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara menghapus duplikat nilai yang dipisahkan koma dalam satu kolom di MySQL

Saya terjebak dalam situasi yang sama dan menemukan bahwa MySql tidak menyediakan fungsi standar untuk mengatasi masalah ini.

Untuk mengatasinya saya membuat UDF, Silahkan simak pengertian dan penggunaannya dibawah ini.

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 ;

Contoh penggunaan:

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

Hasil:

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

Semoga membantu!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa membangun kembali indeks dan memperbarui statistik di MySQL innoDB?

  2. Cara Memeriksa Hak Pengguna di MySQL Workbench menggunakan GUI

  3. Bagaimana cara menambahkan kondisi dalam model anak sub-sub dalam sekuel yang akan memengaruhi Model induk saya di findAndCountAll?

  4. Membuat Tabel menggunakan vb.net, mysql

  5. MySQL match() against() - urutkan berdasarkan relevansi dan kolom?