mysql - 使用 MySQL 在 CSV 中搜索

标签 mysql search csv sql

我知道这可以使用 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/

相关文章:

php - 读取大文件时出现内存不足错误

python - 修改从csv文件导入的pandas数据框

php - 使用输入字段将小时和分钟添加到日期时间?

java - Elasticsearch 搜索 Java API

c - 在 C 中搜索二维数组中的特定值

search - 为什么我无法搜索标题包含 "latex"的帖子?

mysql - 我的 SQL 代码不断出现此错误

php - 自动同步两个mysql表,但有异常

java - 在 Hibernate 实体中合并表的字段

python:对csv文件中的坐标进行排序