Tôi gặp phải trường hợp tương tự và nhận thấy rằng MySql không cung cấp bất kỳ chức năng xác định trước nào để khắc phục sự cố này.
Để khắc phục, tôi đã tạo một UDF, Vui lòng xem bên dưới về cách khử nhiễu và cách sử dụng.
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 ;
Cách sử dụng mẫu:
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';
Kết quả:
2,22,3,34,54,45,65,67,23,32,323
Hy vọng sự giúp đỡ này!