目录
源数据表
学号 | 姓名 | 成绩 |
20070519 | 何艳 | C |
20091884 | 何冬梅 | D |
20090790 | 冯晨 | E |
20071880 | 彭勤 | B |
20090562 | 叶倩 | C |
20091713 | 曾德昌 | C |
20081058 | 曹乾刚 | A |
20090018 | 雷小露 | B |
20071277 | 余佳丽 | A |
20081809 | 赵林 | E |
20071927 | 邓明昊 | A |
20060058 | 邱志娟 | A |
20091932 | 马琴 | D |
20080751 | 王清秀 | C |
20081379 | 李晓斌 | C |
20080702 | 王川洪 | D |
20081079 | 肖妤翊 | E |
20060338 | 程飞娥 | B |
20061072 | 孙双米 | B |
20081226 | 张玲 | A |
20070995 | 周榕珍 | B |
20090679 | 刘芙蓉 | E |
20091704 | 王亚坤 | C |
20081217 | 柴俊 | B |
20090532 | 随婷婷 | D |
20080336 | 文森 | C |
20071031 | 钦麦翁姆 | E |
20081452 | 欧仁寿 | C |
20080375 | 王清容 | A |
20071469 | 罗秀丽 | C |
20090204 | 杨永艳 | D |
20060228 | 姚鹏 | D |
20060525 | 卢思彤 | A |
20091284 | 何刚 | B |
20061998 | 刘华平 | F |
20060304 | 马晓冬 | D |
20060844 | 尹玫 | D |
20071318 | 李金龙 | E |
许多学校采用5分制的成绩,这样的成绩计分通常采用A、B、C、D、E从高到低表示成绩。如图所示为某学校某科目的考试成绩,查询此次考试中成绩为C以上(包含C)的同学,而不显
示成绩为D和E的同学。
解决方案
SELECT *
FROM [sheet1$]
WHERE 成绩 LIKE '[A-C]'
模糊匹配中字符区间的表示
在LIKE运算符的匹配模式中,可以用方括号表示某一范围的字符,其具体格式为:
[value1-value2]
其中,value1和value2分别代表指定范围的最小值和最大值。value1必须小于或等于Value2,才能得到正确的结果,当value1等于value2时,就相当于运用了等号运算符查询字段值等于value1的数据。该特性类似于BETWEEN运算符。在英文匹配模式中,value1和Value2只能是A~Z的一个字符。如:[C-Q]的表示方法是正确的,而[AC-AD]的表示方式是错误的。
在Excel SQL中,英文字符大小是按照ASCⅡ码进行排列的:A最小,Z最大。但是英文字符的比较是不区分大小写的。因而,本例的实现也可以通过比较运算符实现,语句如下:
SELECT *
FROM [sheet1$]
WHERE 成绩<='C'
但是相对于比较运算符,LIKE的模糊匹配更灵活且适应性更广。比如,在某个英文单词列表中要查询第二个字母为"A"~“C”的所有英文单词,可以用“_[A-C]%"实现。这种查询是比较运算符不能实现的。
范围匹配还可以用于匹配指定范围以外的数据,其格式如下:
[!value1-value2]
如本例中,如果要查询成绩为C(包含C)以上的所有同学,还可以用以下SQL语句实现:
SELECT *
FROM [sheet1$]
WHERE 成绩 LIKE '[!D-E]'
该语句表示成绩为D~E范围之外的数据。
一个方括号范围匹配模式只能表示一个英文字符,如果要采用多个英文字符的范围匹配模式,必须使用相应个数的方括号范围匹配。