我在表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/