通配符 LIKE 匹配的 MySQL 行为

标签 mysql wildcard sql-like

我在表A中有以下数据...

ID | Text
---------------------------------------------
1  | let's find this document
2  | docments are closed

...如果我执行以下选择...

select Text from TableA where Text like '%doc%';

...我似乎得到了一个奇怪的结果。返回两行。有了这个选择,它不应该只返回第 1 行吗?我本来以为..

select Text from TableA where Text like 'doc%';

...只会返回第 2 行。我是否遗漏了什么?

我想要做的是在我的搜索工具中对这些数据运行 3 次单独的搜索。第一个匹配是在字符串的开头查找指定的模式“doc”,其次,我的下一个匹配查找相同的模式,但在字符串的末尾,第三,确定该模式是否出现在文本中的任何地方- 所以周围可以有文字。理想情况下,第一次搜索只会匹配第 2 行,第二次搜索不会返回任何结果,第三次搜索只会返回第 1 行。

这样做的原因是我想尝试并获得感觉模式如何匹配字符串。如果知道给定行的模式匹配 (a) 开头、(b) 结尾、(c) 中间任意位置,将会更容易阅读结果。

有考虑过使用正则表达式,但我的数据是 unicode。

最佳答案

不,第一个查询返回两行,因为 % 表示 0 或更多字符。因此,如果 doc 是出现在该字段中的第一件事,它也匹配 %doc% 模式。

但是你在第二个查询上是对的,它只会返回第 2 行。

关于通配符 LIKE 匹配的 MySQL 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14360034/

相关文章:

mysql - 从数据库中选择三个序列

带有特殊字符'的类似mysql的查询

mysql - 通过逗号分隔的字段搜索

php - 如何从 MySql 检索信息而忽略特殊字符?

php - MySQL DISTINCT/GROUP BY 与 MAX()

php - Ajax PHP 作用域问题

php - 使用 PHP 更新数据库中的多行,但仅更新前三行

css - 由于通配符而未显示边框

java - 具有下限的嵌套通配符

java - Java中的通配符问题