SQL查询语句通配符与ACCESS模糊查询like的解决方法(2)

帮助都这么写了,没有任何问题啊,到底问题是出在哪里呢?更加让本人迷惑。后来问了一下同事说:你的SQL语句错了,通配符应该用%,而不是*。可是帮助里面说的是*,而且我在Access中试验一切正常,同事也说不上个所以然来,于是继续查找帮助需求答案。在另一个帮助文件中找到了如下信息:

///////////////////////////////////////////////////////////

内置的模式匹配方法提供了一个用于字符串比较的通用工具。下表中展示了可以用于 Like 运算符的通配符,以及与它们匹配的数字和字符串。

pattern 中的字符expression 中的匹配项
? 或 _(下划线) 任何单个字符
* 或 % 零个或多个字符
# 任何单个数字 (0— 9)
[charlist] 在 charlist 中的任何单个字符。
[!charlist] 不在 charlist 中的任何单个字符。


可以使用一组由中括号 ([]) 括住的一个或多个字符(charlist)来匹配在 expression 中的任何单个字符,并且 charlist 可以包含大部分 ANSI 字符集中的字符,包括数字在内。可以通过将特定字符如左方括号 ([)、问号 (?)、数字号 (#) 和星号 (*) 包含于方括号内来直接与这些符号自身进行匹配。不能将右方括号用在一个组中以匹配它自身,但可以将它作为单个字符用于组外。

除了括在方括号中的简单字符列表外,charlist 可以通过使用连字符号 (-) 来分隔范围的上界和下界。例如,在 pattern 中使用 [A-Z] 时,如果 expression 中相应的字符包含了任何在 A 到 Z 范围之间的大写字符,就能实现匹配。可以在方括号中包含多个范围而不必为范围划界。例如,[a-zA-Z0-9] 可以匹配任何字母数字字符。

请注意,ANSI SQL 通配符 (%) 和 (_) 仅在 Microsoft? Jet 4.X 版本和 Microsoft OLE DB Provider for Jet 中才是有效的。如果用在 Microsoft Access 或 DAO 中,那么它们被视为文本。

其他重要的用于模式匹配的规则如下所示:

在 charlist 的开头使用感叹号 (!) 将表示如果在 charlist 以外的任何字符出现在 expression 中,则发生匹配。当它用在方括号的外面时,感叹号匹配它自身。
可以将连字符号 (-) 用于 charlist 的开头(感叹号之后)或末尾以匹配它自身。在其他任何位置中,连字符号标识一个 ANSI 字符范围。
指定了一个字符范围时,字符必须以升序排列出现(A-Z 或 0-100)。[A-Z] 是有效的模式,[Z-A] 是无效模式。
忽略字符顺序 [ ];它被视为一个零长度字符 ("")。
参考地址:http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx

///////////////////////////////////////////////////////////////

至此,原因总算是找到了,由于本人在Access中使用通配符*一切正常,换成%则不能成功。而C#中则只是支持%通配符,而换成*则会出错!这个问题算不算是一个兼容性问题呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2368.html