我在TableA中有以下数据......
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 :(得分:3)
不,第一个查询会返回两行,因为%
表示 0 或更多字符。因此,如果doc
是字段中出现的第一个内容,它也会匹配%doc%
模式。
但是你在第二个查询上是正确的,它只会返回第2行。
答案 1 :(得分:1)
doc_%
应该在开头匹配它,后面至少有一个字符。%_doc
最后应匹配,前面至少有一个字符。%_doc_%
应该在任何地方匹配,在之前至少有一个字符,然后。请注意,这些严格的标准失败以找到确切的字符串“doc”,即在其之前或之后没有任何内容。您可能希望将此案例包含在查询#1中,方法是放松它:
doc%
应该在开头匹配它,后面有任意数量的字符。