SQL Server在数据中存储通配符

时间:2018-06-08 18:12:32

标签: sql sql-server sql-like

我在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查询中找到大量信息,其中通配符位于查询本身,而不是数据中。

  1. 这是什么叫巫毒,我在哪里可以找到文件?
  2. 其他数据库是否支持它?
  3. 在不编写额外代码的情况下,搜索索引(SOLR或ElasticSearch)中是否存在此功能?
  4. 更新 所以,与我糟糕的记忆并没有那么多伏都教。反转like更有意义 SELECT * FROM tble WHERE '123' LIKE Column1

3 个答案:

答案 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)

如果将操作数的顺序反转为LIKE

SELECT * FROM tbl WHERE '123' LIKE Column2将返回所有记录。

请参阅this demo