问题 sql server中_%_%和__%的区别


我正在学习SQL的基础知识 W3School 在理解基础知识的过程中 通配符 我经历了以下查询:

--Finds any values that start with "a" and are at least 3 characters in length
WHERE CustomerName LIKE 'a_%_%'

按照以下示例查询将搜索表所在的位置 CustomerName 列以'a'开头,长度至少为3个字符。

但是,我也尝试以下查询:

WHERE CustomerName LIKE 'a__%'

上面的查询也给了我完全相同的结果。 我想知道两个查询是否有任何区别?在某些特定情况下,第二个查询是否会产生不同的输出?如果是,那将是什么情景?


11411
2017-11-27 07:26


起源

我认为两者都是一样的 - Md. Suman Kabir
@YogeshSharma但我们已将%放在最后,这意味着它最终将打印出任何字符。我也执行了两个查询,两者都显示相同的输出。 - Chetan Mehra
实际上看起来像是一个错误。 - pipe
代码的作者可能认为双下划线很容易被误读为单个下划线。第一种模式以奇怪的方式清楚地表明存在两个下划线。这些模式在功能上是等同的。 - HABO


答案:


两者都以 A并以...结束 %。在中间部分,第一个说“一个字符,然后在零和多个字符之间,然后一个字符“,而第二个说”一个char,然后一个char”。

考虑到它们之后的部分(最后一部分)是 %, 意思是 ”在零和多个字符之间“,我只能看到两个子句相同,因为它们本身只是想要一个以字符串开头的字符串 A 然后至少有两个跟随字符。也许如果对于允许的角色至少有一些限制 _那么也许他们可能会有所不同。

如果我不得不选择,我会选择第二个更直观。毕竟,许多其他面具(例如 a%%%%%%_%%_%%%%%)会产生同样的效果,但为什么会出现奇怪的复杂性?


9
2017-11-27 07:33



同意你。 - Chetan Mehra


对于Like运算符,单个下划线“_”表示任何单个字符,因此如果你将一个下划线表示为

ColumnName LIKE 'a_%'

你基本上说你需要一个字符串,其中第一个字母是'a',然后是另一个单个字符,然后是任何东西或什么都没有。

ColumnName LIKE 'a__%' 要么 ColumnName LIKE 'a_%_%'

两个表达式都表示第一个字母'a',然后是两个字符,然后是任何东西或什么都没有。或者用简单的英语,任何以3个或更多字符开头的字符串 a


4
2017-11-27 07:35