类通配符匹配的MySQL行为
我在表A中有以下数据类通配符匹配的MySQL行为,mysql,wildcard,sql-like,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 T
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)在中间的任何地方。
BR>曾想过使用ReGEXP,但我的数据是Unicode。< /P> < /P> < P>不,第一个查询返回两行,因为<代码> %<代码>意味着<强> 0 < /强>或更多字符。因此,如果字段中第一个出现的是
doc
,那么它也与%doc%
模式匹配
但是第二个查询是对的,它只返回第2行。否,第一个查询同时返回两行,因为
%
表示0或更多字符。因此,如果字段中第一个出现的是doc
,那么它也与%doc%
模式匹配
但第二个查询是对的,它只返回第2行
doc%
应该在开头匹配,后面至少有一个字符%\u doc
应在末尾与之匹配,前面至少有一个字符%\u doc%
应在任何位置匹配它,前后至少有一个字符doc%
应该在开头匹配,后面有任意数量的字符doc%
应该在开头匹配,后面至少有一个字符%\u doc
应在末尾与之匹配,前面至少有一个字符%\u doc%
应在任何位置匹配它,前后至少有一个字符doc%
应该在开头匹配,后面有任意数量的字符你想完成什么?您基本上说明了MySQL所做的事情——这并不是什么不同寻常的事情。也许,如果你解释一下你的最终目标是什么,我们就可以回答你想要做的事情。是任何字符的替代品,不包括任何字符。因此,据
%doc
所知,“doc”与“doc”相同,它更新了我的原始帖子,并提供了更多关于我最终目标的信息。如果是任何字符,而不是“no”字符,该怎么办。我在考虑所有三个比赛练习的综合结果,这将导致混乱,因为第一排和第二排将同时匹配测试1和测试3。我会遇到一些问题,比如“文档已关闭”如何可以是“字符串开头的匹配”和“字符串中任何位置的匹配”。你想实现什么?您基本上说明了MySQL所做的事情——这并不是什么不同寻常的事情。也许,如果你解释一下你的最终目标是什么,我们就可以回答你想要做的事情。是任何字符的替代品,不包括任何字符。因此,据%doc
所知,“doc”与“doc”相同,它更新了我的原始帖子,并提供了更多关于我最终目标的信息。如果是任何字符,而不是“no”字符,该怎么办。我在考虑所有三个比赛练习的综合结果,这将导致混乱,因为第一排和第二排将同时匹配测试1和测试3。我会被问到“文档已关闭”如何可以是“字符串开头的匹配”和“字符串中任何位置的匹配”。