我在SQL Server中看到一个表,其中包含实际表数据中的%
通配符。即:
Column1 : Column2 : Column3
1 % 2
3 % %
这允许开发人员对此数据运行like
查询,并且基础数据也将作为辅助模式匹配进行评估。
SELECT * FROM tbl WHERE Column1 LIKE '123'
将不会返回任何记录。
SELECT * FROM tbl WHERE Column2 LIKE '123'
将返回所有记录。
SELECT * FROM tbl WHERE Column3 LIKE '2'
将返回所有记录。
SELECT * FROM tble WHERE Column3 LIKE '123'
只返回最后一条记录。
我到处寻找可以找到这种可能性,但我只能在like
查询中找到大量信息,其中通配符位于查询本身,而不是数据中。
更新
所以,与我糟糕的记忆并没有那么多伏都教。反转like
更有意义
SELECT * FROM tble WHERE '123' LIKE Column1
答案 0 :(得分:4)
你的例子倒了。
您需要使用
SELECT * FROM tbl WHERE '123' LIKE Column1
等
提供您想要的结果(demo)
没有特别的" voodoo"。 LIKE
在左侧使用带有匹配表达式的字符串,在右侧使用带有图案的字符串,并且如果其中一个或两个字符串来自列,则不关心。因此,您需要的文档只是LIKE
的文档。
它会在我想象的所有DBMS中以这种方式运行。
但是,虽然这个开发人员可能已经发现方便所有这些查询将导致表扫描,而不是能够通过搜索更有效地找到所需的行。
答案 1 :(得分:2)
我认为“伏都教”被称为or
:
WHERE Column1 LIKE '123' OR Column1 = '%'
OR
是一种跨语言的非常常见的结构,所以我希望其他系统(例如ElasticSearch)也支持它。
Here是一个rextester,表明结果是正确的。
正如我在评论中提到的那样。我特意选择了这个解决方案,因为OP提到了“模式匹配”,这使我认为固定模式可能有通配符。关于这一点,问题有点模棱两可,反向like
可能是OP的想法。这不是我读这个问题的方式。
答案 2 :(得分:2)