sql 多个字段模糊查询

如何使用 sql 查询:
举列:如何在一列中,如下图:
项目名称

  1. 金茂汇
    2、金格金茂
    3、恒景国际
    4、金茂 16 期
    找出与下面项目名称相似的字段。
    项目:金茂,广西金茂,没法使用 like 原因:被查找的项目会有很多,不能单独指定一个

TechWhizKid参考GPT回答:

在 SQL 中,可以使用 LIKE 运算符来执行模糊查询。如果你想找出所有包含 "金茂" 这个词的项目名称,可以按照以下方式编写查询:

SELECT * FROM your_table
WHERE 项目名称 LIKE '%金茂%';

其中,your_table 是你的数据表名,项目名称 是你的字段名。% 是一个通配符,表示任意数量的任意字符。

如果你要搜索多个关键词,可以使用 OR 运算符来连接多个 LIKE 子句:

SELECT * FROM your_table
WHERE 项目名称 LIKE '%金茂%'
OR 项目名称 LIKE '%广西金茂%';

这个查询将返回所有包含 "金茂" 或 "广西金茂" 的项目名称。

// 基本格式如下:
SELECT * FROM table_name WHERE col_name LIKE '%查询关键词%';

用的什么sql

你的要求是不使用like关键字,试试这个可以使用LOCATE函数来查询是否包含关键词,

SELECT * FROM table_name WHERE LOCATE('金茂',' 广西金茂') > 0;

以上语句将会返回所有项目名称中包含"金茂"的行。注意,使用LOCATE函数时,需要在关键词前后加上一个空格,以避免误匹配。

不使用like,可以尝试使用 SOUNDEX 函数或者 DIFFERENCE 函数来比较项目名称的相似度。这些函数可以用于对文本进行音频或文本相似性的评估。
1.使用 SOUNDEX 函数:
SOUNDEX 函数将一个字符串转换为描述其音频表示的四个字符代码。你可以使用 SOUNDEX 函数来比较项目名称的音频相似性。以下是一个示例查询:

SELECT project_name
FROM your_table
WHERE SOUNDEX(project_name) = SOUNDEX('金茂')

这将返回与 '金茂' 的音频表示相同的项目名称。
2.使用 DIFFERENCE 函数:
DIFFERENCE 函数返回两个字符串之间的相似度。它根据 SOUNDEX 值计算相似性分数,分数介于 0 和 4 之间。以下是一个示例查询:

SELECT project_name
FROM your_table
WHERE DIFFERENCE(project_name, '金茂') >= 3

这将返回与 '金茂' 相似度分数大于等于 3 的项目名称。
注意,这些方法仍然会根据数据库的实现和语言设置产生不同的结果。如果需要更精确的相似性匹配,你可能需要使用全文搜索引擎或外部库来实现更高级的模糊匹配。

完全基于数据库实现可以使用like关键字,如果不能用like,也可以采用搜索引擎的方式实现。

试试这个sql:

SELECT p1.project_name, p2.project_name AS similar_project_name
FROM projects p1
JOIN projects p2 ON p1.project_name <> p2.project_name
WHERE levenshtein(p1.project_name, p2.project_name) <= 2;

你可以去看看levenshtein这个函数的使用,应该是你想要的

能具体说下需求吗,你查询的规则描述清楚一些,可以考虑增加字典表的方式存储查询关键字

为啥没办法用like
多个like之间用or连接呀

同时查询多个项目吗?

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可以使用存储过程+动态 sql 来实现,在存储过程中循环遍历所有的项目,然后拼接 like '%项目名称 1%' or like '%名称 2%'......,以此类推。

源于chatGPT仅供参考

如果你想在SQL中进行多个字段的模糊查询,可以使用`OR`运算符组合多个`LIKE`条件。以下是一个示例查询语句:

```sql
SELECT * FROM 表名
WHERE1 LIKE '%金茂%'
   OR2 LIKE '%金茂%'
   OR3 LIKE '%金茂%'
   OR4 LIKE '%金茂%'

在上述示例中,假设你有一个名为"表名"的表,并且想要查找列1、列2、列3和列4中包含"金茂"的记录。你可以使用LIKE关键字配合通配符%来进行模糊匹配,并使用OR运算符将多个条件连接起来。

这样,查询结果将包含所有满足任意一个列中包含"金茂"的记录。

请根据你的实际情况将上述查询语句中的"表名"和列名替换为你真实的数据库表名和列名。

```