我们都知道,在SQL查询中可以使用百分号%来模糊查询; 但是,实际上JET-SQL支持好几种通配符, 这意外着,我们在查询ACCESS和SQL Server时可以更自由的定义模糊查询的方式,而不是单纯死板的只能使用%匹配任意个数的任意字符.
这些通配符一般老师不会讲,我们也很少注意. 使用得当会提高我们的工作效率,某些工作不再需要编码完成,简单一个SQL就能搞定! 当然,比起有名的正则表达式, 还是弱多了! 详细支持的通配符列如下(源自ACCESS在线帮助及<Microsoft Jet SQL参考>):
字符 | 说明 | 示例 |
---|---|---|
* | 与任何个数的字符匹配。在字符串中,它可以当作第一个或最后一个字符使用。 | wh* 可以找到 what、white 和 why |
? | 与任何单个字母的字符匹配。 | B?ll 可以找到 ball、bell 和 bill |
[ ] | 与方括号内任何单个字符匹配。 | B[ae]ll 可以找到 ball 和 bell 但找不到 bill |
! | 匹配任何不在方括号之内的字符。 | b[!ae]ll 可以找到 bill 和 bull 但找不到 ball 或 bell |
- | 与某个范围内的任一个字符匹配。必须按升序指定范围(A 到 Z,而不是 Z 到 A)。 | b[a-c]d 可以找到 bad、bbd 和 bcd |
# | 与任何单个数字字符匹配。 | 1#3 可以找到 103、113、123 |
在下面的例子里,会返回以字母 P 开头、而其后接着介于 A 到 F 之间的任何字母和三个数字的数据:
Like "P[A-F]###"
在下面的列表中说明如何使用 Like 运算符来测试不同样式的表达式。
符合的种类 |
样式 |
符合(返回 True ) | 不符合(返回 False ) |
---|---|---|---|
多个字符 | a*a | aa,aBa,aBBBa | aBC |
*ab* | abc,AABB,Xab | aZb,bac | |
特殊字符 | a[*]a | a*a | aaa |
多个字符 | ab* | abcdefg,abc | cab,aab |
单一字符 | a?a | aaa,a3a,aBa | aBBBa |
单一数字 | a#a | a0a,a1a,a2a | aaa,a10a |
字符范围 | [a-z] | f,p,j | 2, & |
范围之外 | [!a-z] | 9, &, % | b,a |
非数字 | [!0-9] | A,a,&,~ | 0, 1, 9 |
组合字 | a[!b-m]# | An9,az0,a99 | abc,aj0 |
但实际使用中还有一点我们需要注意,上面的通配符是在ACCESS界面中支持的,即在ACCESS的查询界面或查找替换对话框中使用的,而Jet SQL使用的是另一套,也就是说在我们自己的工程中写SQL时需要使用下面这套通配符:
字符 | 说明 | 示例 |
---|---|---|
% | 与任何个数的字符匹配,在字符串中,它可以当作第一个或最后一个字符使用。 | wh% 可以找到 what、white 和 why |
_ | 与任何单个字母的字符匹配。 | B_ll 可以找到 ball、bell 和 bill |
[ ] | 与方括号内任何单个字符匹配。 | B[ae]ll 可以找到 ball 和 bell 但找不到 bill |
^ | 匹配任何不在方括号之内的字符。 | b[^ae]ll 可以找到 bill 和 bull 但找不到 ball 或 bell |
- | 与某个范围内的任一个字符匹配。必须按升序指定范围(A 到 Z,而不是 Z 到 A)。 | b[a-c]d 可以找到 bad、bbd 和 bcd |
也许你和我一样(因为我经常用ACCESS自动生成SQL语句,修改后直接贴到代码的SQL里.),不喜欢在ACCESS中(指直接使用ACCESS程序来打开mdb文件)使用*来代替%以匹配多个字符,那么也有个解决办法:
打开ACCESS的工具菜单 >> 选项子菜单 >> 表/查询 页面 >> SQL Server 兼容语法(Ansi 92) >> 勾选下面复选框"当前数据库";
若想将这项"作为新数据库的默认设置", 那么你必须先在 高级 页面 的 默认文件格式 下拉菜单选择 "ACCESS 2002 - 2003".
经过上面的设置,我们在ACCESS的查询界面写SQL就也可以用%来匹配多个字符了.
===================================
非注明转载的文章和blog在未特殊声明情况下一般为本人原创或整理,
原创文章版权归沙漠孤狐(lonefox)所有;转载文章版权归原作者所有;
http://blog.csdn.net/boythl
欢迎转载,但请注明出处,保留作者和版权信息。
===================================