被尾随空格困住:SQL 比较难题
考虑以下 SQL 查询,我们在其中尝试匹配 Zone 表中的值:
select '"' + ZoneReference + '"' as QuotedZoneReference from Zone where ZoneReference = 'WF11XU'
令我们惊讶的是,结果显示出意外的尾随space:
"WF11XU "
尽管有尾随空格,SQL Server 仍返回一个匹配项,让我们感到困惑。
这种看似违反直觉的行为可以通过深入研究指导 SQL Server 字符串比较的标准来解释。根据 ANSI/ISO SQL-92 规范,SQL Server 在执行检查之前填充比较中使用的字符串,以确保它们具有相同的长度。此规则扩展到大多数比较操作,使得像 'abc' 和 'abc ' 这样的字符串在字符串比较中等效。
但是,此规则的例外是 LIKE 谓词。仅当涉及 LIKE 运算符时,SQL Server 才会避免填充。这种区别源于 LIKE 谓词的主要目的是模式匹配,而不是直接字符串相等性测试。
在我们的示例中,由于我们使用简单的相等运算符 (=),因此 SQL Server 会考虑尾随空格,从而促成一场成功的比赛。如果我们的目的是搜索精确匹配,我们可以使用 LIKE 谓词,它会忽略尾随空格并提供更准确的结果。
以上是尽管使用了等号运算符,为什么我的 SQL 查询仍与尾随空格匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!