SQL Server中LIKE '[A-D]%'与BETWEEN 'A' AND 'D'的区别是什么?
两种SQL查询条件的核心差异解析
嘿,这个问题问到点子上了——这两个条件看似相似,但实际匹配逻辑和结果天差地别,我给你拆解清楚:
1. 匹配逻辑的本质区别
LIKE '[A-D]%':首字符通配匹配
这是用SQL的通配符做模式匹配,它只关注字符串的第一个字符是否落在A到D的范围内(具体是否区分大小写/重音,取决于你的数据库排序规则)。只要首字符符合要求,后面不管跟着数字、符号还是其他字符,都会被命中。比如'Cat123'、'D-$'、'ApplePie'这类字符串都能被匹配到。BETWEEN 'A' AND 'D':全字符串范围比较
这是基于SQL Server的字符串排序规则做整体范围判断,它会把整个字符串当作一个比较单元,匹配所有**大于等于'A'且小于等于'D'**的字符串。这里要注意:'D'是严格上限,任何以D开头但后面还有字符的字符串(比如'Dog')都会因为比'D'大(字符串比较时,后续字符会参与判断,空字符小于任何可见字符)而被排除。
2. 边界值与具体案例对比
假设你的table1里有这些name值:'A', 'Apple', 'D', 'Dog', 'Cat', 'Egg', 'D123'
- 用
WHERE name LIKE '[A-D]%'会返回:'A','Apple','D','Dog','Cat','D123' - 用
WHERE name BETWEEN 'A' AND 'D'会返回:'A','Apple','D','Cat'
3. 排序规则的影响细节
两者都受数据库排序规则(比如SQL_Latin1_General_CP1_CI_AS是不区分大小写,SQL_Latin1_General_CP1_CS_AS是区分大小写)影响,但表现略有不同:
- 如果是区分大小写的规则,小写的
'apple'首字符是a,不会被'[A-D]%'匹配;同时'apple'也小于'A',所以也不会被BETWEEN 'A' AND 'D'命中。 - 对于特殊字符(比如带重音的
Á),两者都会遵循排序规则里的字符顺序判断,但LIKE只看首字符,BETWEEN则会比较整个字符串的顺序。
内容的提问来源于stack exchange,提问作者Sanjit Prasad
相关产品推荐
相关产品推荐

