SQL 服务器在数据中存储通配符

SQL Server storing wildcards in data

我在 SQL 服务器中看到了一个 table,它在实际的 table 数据中包含 % 通配符。即:

Column1 : Column2 : Column3
1        %         2
3        %         %

这允许开发人员 运行 like 查询此数据,并且基础数据也将评估为辅助模式匹配。

SELECT * FROM tbl WHERE Column1 LIKE '123' 会 return 没有记录。

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

SELECT * FROM tbl WHERE Column3 LIKE '2' 将 return 所有记录。

SELECT * FROM tble WHERE Column3 LIKE '123' 将 return 只有最后一条记录。

我到处查看以了解这是如何实现的,但我只能找到一堆关于 like 查询的信息,其中通配符在查询本身中,而不是在数据中。

  1. 这个巫术叫什么,我在哪里可以找到文档?
  2. 其他数据库支持吗?
  3. 是否在不编写额外代码的情况下在搜索索引(SOLR 或 ElasticSearch)中存在此功能?

更新 所以,与其说是巫术,不如说是我记忆力不佳。反转 like 更有意义。
SELECT * FROM tble WHERE '123' LIKE Column1

我认为 "voodoo" 叫做 or:

WHERE Column1 LIKE '123' OR Column1 = '%'

OR 是一种非常常见的跨语言结构,因此我希望其他系统(例如 ElasticSearch)也支持它。

Here 是一个 rextester,表明结果是正确的。

正如我在评论中提到的。我特地选择了这个解决方案,因为 OP 提到了一个 "pattern match",让我认为固定模式可以有通配符。这个问题在这一点上有点模棱两可,相反 like 可能是OP的想法。这不是我阅读问题的方式。

你的例子颠倒了。

你需要使用

SELECT * FROM tbl WHERE '123' LIKE Column1 

等等

给出你想要的结果(demo)

没有特别的"voodoo"。 LIKE 接受左侧带有匹配表达式的字符串和右侧带有模式的字符串,并且不关心其中一个或两个字符串是否来自列。因此,您需要的文档只是 LIKE.

的文档

它在我想象的所有 DBMS 中都会以这种方式运行。

但是,虽然该开发人员可能发现它很方便,但所有此类查询都将导致 table 扫描,而不是能够通过搜索更有效地定位所需的行。

如果将操作数的顺序颠倒为LIKE

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

this demo