【问题标题】:SQL query with WHERE clause acts as if it's using a % wildcard operator带有 WHERE 子句的 SQL 查询就像使用 % 通配符一样
【发布时间】:2012-08-13 06:30:59
【问题描述】:

SQL Server 2008: 我有一个使用WHERE 子句查找具有特定字符串的行的查询。因此,假设我正在寻找带有字符串 1234 的条目,查询将类似于...

SELECT * FROM [table] WHERE [column] LIKE '1234'

尽管此查询有效,但它也返回带有字符串1234 [A]1234 [B] 的行。

我不确定为什么它的行为就像我在使用 % 通配符运算符一样。所以,我需要一些能返回严格相等的东西。我有一段时间没有使用 Microsoft SQL Server,所以我想知道我是否遗漏了一些明显的东西。我查看了COLLATION,但这似乎只处理区分大小写和重音的问题。

【问题讨论】:

  • 只需使用相等运算符,例如。 “[列] = '1234'”
  • 这里使用=而不是LIKE是正常的,但是您发布的查询应该可以满足您的需求。可能有不同的问题。
  • 支持您的查询还有其他问题的概念。无论如何,您都应该使用 =,除非您确实需要在某些查询上使用 LIKE 进行模式匹配,但是您发布的查询应该返回您期望的结果。

标签: sql sql-server-2008 select where


【解决方案1】:

试试这个:

SELECT * FROM [table] WHERE [column] = '1234'

【讨论】:

  • 谢谢,我就是这么想的,但是equals也不能解决我的问题。
  • @ornjman 你是什么意思“不能解决我的问题”?你是说当你使用`='1234'`时你也会得到valye是'1234 [A]'的行?如果是这样,要么你的 where 子句被注释掉,你会在下一列中看到类似 '[A]' 的结果,并假设它们是本列的一部分,或者还有其他事情你没有告诉我们。您可以发布完整的重现而不是仅发布查询吗?
  • 是的,当我使用 `= '1234'` 时,我仍然得到 '1234 [A]'。我刚刚意识到这个查询已更改为使用 JOIN,但我不明白这会如何影响它。所以,我将不得不看一下 JOIN 语句,因为我在没有加入的情况下尝试了它,并且它按我想要的方式工作,严格返回没有 '1234 [A]' 的 '1234'。但是,当它与 JOIN 语句一起使用时,我会得到额外的结果。但是,由于紧急情况,我必须在早上回来。所以,我感谢大家的帮助。有谁知道 join 语句如何做到这一点?
  • 检查实际使用了哪些列。如果您有 2 个表,T1 (id, value) 和 T2 (id, value),并且您执行了如下查询: select T1.id, T2.value from T1 inner join T2 on T1.id = T2.id where T1.value = "ABCD" ...您最终会从 T1 中选择 value="ABCD" 的行,但您的值列将充满来自 T2 的结果...如果它们采用格式“ABCD [1]”、“ABCD [2]”等,会给你这些结果。检查您是否真的在查看正确的列。如果是这个原因,那么您还有另一个问题,即您的数据库可能没有正确规范化。
  • 好的,非常感谢您的帮助。发生了其他事情,我发现它有点看错了列。结果“ABCD”和“ABCD [1]”实际上包含相同的标识符“ABCD”。没有完整的示例会令人困惑,但我有两个进程“ABCD”和“ABCD [1]”都使用“ABCD”部分。尽管该过程与零件名称相同,但它还包括其他零件。我只希望返回部分,但查询实际上返回的是进程而不是部分。感谢您的努力,这绝对是对 JOIN 力量的觉醒!
【解决方案2】:

只用等号

SELECT * FROM [table] WHERE [column] = '1234'

【讨论】:

  • 谢谢,我就是这么想的,但是equals也不能解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2022-10-17
  • 2022-01-06
相关资源
最近更新 更多