我正在通过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__%'
以上查询也给出了完全相同的结果。 我想知道这两个查询是否有任何区别?在某些特定情况下,第二个查询是否会产生不同的输出?如果是,那将是什么情景?
答案 0 :(得分:9)
两者均以A
开头,以%
结尾。在中间部分,第一个说“一个字符,然后在零和多个字符之间,然后一个字符”,而第二个说“一个字符,然后一个字符 ”
考虑到它们之后的部分(最后部分)是%
,这意味着“介于零和多个字符之间”,我只能将两个子句视为相同,因为它们基本上只需要一个以A
开头然后至少有两个后续字符的字符串。也许如果对_
允许的字符至少有一些限制,那么也许它们可能会有所不同。
如果我不得不选择,我会选择第二个更直观的。毕竟,许多其他面具(例如a%%%%%%_%%_%%%%%
)将产生相同的效果,但为什么会出现奇怪的复杂性?
答案 1 :(得分:4)
对于Like运算符,单个下划线" _"意思是,任何单个字符,所以如果你把一个下划线像
ColumnName LIKE 'a_%'
你基本上说你需要一个首字母是' a'然后是另一个单个角色,然后是任何事情或者什么都没有。
ColumnName LIKE 'a__%'
或ColumnName LIKE 'a_%_%'
这两个表达都意味着第一个字母' a'然后跟着两个字符然后跟着什么或者什么都没有。或者用简单的英语,任何以a
开头的3个或更多字符的字符串。