sql server中_%_%和__%之间的区别

问题描述 投票:11回答:2

我正在通过W3School学习SQL的基础知识,在理解wildcards的基础知识时,我经历了以下查询:

--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__%'

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

sql sql-server tsql sql-server-2012
2个回答
9
投票

两者都以A开头,以%结束。在中间部分,第一个说“一个字符,然后是零和多个字符,然后是一个字符”,而第二个表示“一个字符,然后一个字符”。

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

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


4
投票

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

ColumnName LIKE 'a_%'

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

ColumnName LIKE 'a__%'ColumnName LIKE 'a_%_%'

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

© www.soinside.com 2019 - 2024. All rights reserved.