gpt4 book ai didi

mysql - 使用 MySQL 在 CSV 中搜索

转载 作者:行者123 更新时间:2023-11-29 09:01:27 25 4
gpt4 key购买 nike

我知道这可以使用 FIND_IN_SET 来完成。但我需要一些不同的东西。

我的一个字段包含 6 位数字,以逗号分隔。其他字符串最多有 5 个值,以逗号分隔。

所以我想获取匹配值的计数。

喜欢:

Database value: 1,2,3,4,5,6  
Search Value: 1,2,3,4

这将得到 4。

Database value: 1,2,3,4,5,6
Search Value: 1,2,3,4,6

这将给出 5。

Database value: 1,2,3,4,5,6
Search Value: 1,4

这将给出 2。

我正在使用 InnoDB 表。

最佳答案

如果您没有使用 InnoDB 表,我建议使用 full text search在一些描述上。但你正在使用 InnoDB!

也就是说,我会沿着 user defined function 的路线走下去。特别是存储的函数。幸运的是,我已经从 previous post 的工作中得到了一个。 。我已经对其进行了调整,以便您可以传入任何分隔符。由于它是一个函数,因此您可以在查询中使用它,就像使用任何其他 MySQL 函数一样。

希望有帮助。

DROP FUNCTION IF EXISTS `CompareStrings`;

DELIMITER $$

CREATE FUNCTION `CompareStrings`(str1 VARCHAR(255),str2 VARCHAR(255), delimiter VARCHAR(1)) RETURNS double
READS SQL DATA
BEGIN
DECLARE cur_position INT DEFAULT 1 ;
DECLARE remainder TEXT;
DECLARE cur_string VARCHAR(255);
DECLARE delimiter_length TINYINT UNSIGNED;
DECLARE total INT;
DECLARE result DOUBLE DEFAULT 0;
DECLARE string2 VARCHAR(255);

SET remainder = str1;
SET string2 = concat(delimiter,trim(str2),delimiter);
SET delimiter_length = CHAR_LENGTH(delimiter);
SET cur_position = 1;

WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO
SET cur_position = INSTR(remainder, delimiter);
IF cur_position = 0 THEN
SET cur_string = remainder;
ELSE
SET cur_string = concat(delimiter,LEFT(remainder, cur_position - 1),delimiter);
END IF;
IF TRIM(cur_string) != '' THEN
set result = result + (select instr(string2,cur_string) > 0);
END IF;
SET remainder = SUBSTRING(remainder, cur_position + delimiter_length);
END WHILE;

RETURN result;

END$$

DELIMITER ;

然后您可以运行如下命令:

select CompareStrings('1,2,3,4,5,6','1,2,3,4',',')

你会得到 4 并且:

select CompareStrings('1,2,3,4,5,6','1,2,3,4,6',',')

你会得到 5

关于mysql - 使用 MySQL 在 CSV 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com