Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server在数据中存储通配符_Sql_Sql Server_Sql Like - Fatal编程技术网

SQL Server在数据中存储通配符

SQL Server在数据中存储通配符,sql,sql-server,sql-like,Sql,Sql Server,Sql Like,我看到了SQL Server中的一个表,该表在实际的表数据中包含了%通配符。即: Column1 : Column2 : Column3 1 % 2 3 % % 这允许开发人员对该数据运行类似于的查询,并且基础数据也将作为辅助模式匹配进行评估 从tbl中选择*,其中像'123'这样的列1将不返回任何记录 从tbl中选择*,其中第2列(如“123”)将返回所有记录 从tbl中选择*,其中第3列(如“2”)将返回所有记录 SELECT*f

我看到了SQL Server中的一个表,该表在实际的表数据中包含了
%
通配符。即:

Column1 : Column2 : Column3
1        %         2
3        %         %
这允许开发人员对该数据运行类似于的查询,并且基础数据也将作为辅助模式匹配进行评估

从tbl中选择*,其中像'123'这样的列1将不返回任何记录

从tbl中选择*,其中第2列(如“123”)将返回所有记录

从tbl中选择*,其中第3列(如“2”)将返回所有记录

SELECT*fromtble,其中像'123'这样的第3列将只返回最后一条记录

我到处都找过,想知道这是怎么可能的,但是我只能找到一些关于
的信息,比如
查询,其中通配符在查询本身中,而不是在数据中

  • 这个巫毒叫什么?我在哪里可以找到文件
  • 其他数据库支持吗
  • 搜索索引(SOLR或ElasticSearch)中是否存在此功能,而无需编写额外代码
  • 更新 所以,与其说是巫毒,不如说是我糟糕的记忆力。将
    一样反转会更有意义。
    从tble中选择*,其中的'123'类似于第1列

    我认为“巫毒”被称为

    WHERE Column1 LIKE '123' OR Column1 = '%'
    
    是跨语言的一种非常常见的构造,因此我希望其他系统(如ElasticSearch)也能支持它

    是显示结果正确的测试仪

    正如我在评论中提到的。我特别选择这个解决方案是因为OP提到了“模式匹配”,这让我想到固定模式可能有通配符。这个问题在这一点上有点模棱两可,相反的
    like
    可能是OP的想法。这不是我理解问题的方式。

    我认为“巫毒”被称为

    WHERE Column1 LIKE '123' OR Column1 = '%'
    
    是跨语言的一种非常常见的构造,因此我希望其他系统(如ElasticSearch)也能支持它

    是显示结果正确的测试仪


    正如我在评论中提到的。我特别选择这个解决方案是因为OP提到了“模式匹配”,这让我想到固定模式可能有通配符。这个问题在这一点上有点模棱两可,相反的
    like
    可能是OP的想法。我不是这样理解这个问题的。

    你的例子倒过来了

    你需要使用

    SELECT * FROM tbl WHERE '123' LIKE Column1 
    
    等等

    给你想要的结果()

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

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


    但是,尽管这位开发人员可能已经发现这很方便,但所有这些查询都将导致表扫描,而不是通过查找更有效地定位所需的行。

    您的示例颠倒了

    你需要使用

    SELECT * FROM tbl WHERE '123' LIKE Column1 
    
    等等

    给你想要的结果()

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

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


    但是,尽管该开发人员可能已经发现这很方便,但所有此类查询都将导致表扫描,而不是通过查找更有效地定位所需的行。

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

    从tbl中选择*,其中像第2列这样的“123”将返回所有记录


    如果将操作数的顺序反转为类似于
    ,请参见

    从tbl中选择*,其中像第2列这样的“123”将返回所有记录


    请看

    很抱歉,我看不出你的答案和问题之间的关系。你是怎么做到的?@Impaler。我读了这个问题。查看条件并验证这将满足四个条件。这似乎正是OP想要的。@Impaler。您应该在Rex测试仪中检查代码。否决票是相当令人反感的,因为这是一个有效且非常简洁的解决方案。对不起,我不理解这个替代方案。很抱歉,我看不出你的答案和问题之间的关系。你是怎么做到的?@Impaler。我读了这个问题。查看条件并验证这将满足四个条件。这似乎正是OP想要的。@Impaler。您应该在Rex测试仪中检查代码。否决票是相当令人反感的,因为这是一个有效且非常简洁的解决方案。对不起,我不理解这个替代方案。我也在SQL Server和MySQL中尝试了你的例子。他们不像你说的那样工作。。。一点也不。我也在SQL Server和MySQL中尝试了你的例子。他们不像你说的那样工作。。。没关系,哦,是的。这对我来说很有意义。呸。。。我以为我疯了。我甚至认为SQL Server具有这种“倒立”功能。。。谁知道呢。我怀疑OP的真正意图是否与之相反。OP明确提到了一个模式匹配,这表明(至少对我来说)问题中的相似模式可能有通配符。@GordonLinoff他们确实有一个模式匹配。带有通配符的模式(在本例中仅为
    %
    )存储在表中。除此之外,
    WHERE'123'LIKE Column2
    如何返回
    Column2
    中的值为
    %
    的行?@MartinSmith。我想用户输入可能是s