您的位置:首页 > 其它

Access中关于大小写敏感查询的问题及解决方案

2012-11-28 15:03 447 查看
Access中关于大小写敏感查询的问题及解决方案,关键字:Access,大小写敏感,模糊查询,Instr,Strcomp

2007-09-30 10:23
工作中遇到一些跟模糊查询有关的问题,其中一个是Access中的大小写敏感问题,找了很多资源,终于找到了所需。
Access中对大小写是不敏感的,特别是当你用like去查询的时候发现要它敏感真的很难,在寻找答案的过程了,有很痛同仁出了很多注意,有些我把它记录下了,并不一定对现在的问题有用,但以后或许能在别的地方用上,在这对这些工作者表示感谢。
先说我的解决方法吧,用到的函数是Instr,而不是我们通常用的like
sqlstr ="select * from 表名 where Instr(1, 字段名, 要查询的子符串, 0) > 0"
例 sqlstr = "select * from user_msg where Instr(1, userName, 'aA', 0) > 0"
找出所有用户名中带有'aA'的资料,这里查用的是二进制比较,所以大小写是敏感的。这个函数在我收集的资料中有详细的解释和例子
一、SQL查询区分大小写方法



InStr 函数
适用于: Microsoft Office Access 2007
全部显示
返回变量型(长型),指定一个字符串在另一个字符串中首次出现的位置。
请参阅一些示例
语法
InStr([start, ] string1, string2 [, compare ] )
InStr 函数的语法包含以下参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):
参数 说明
start 可选。数值表达式 (数字表达式:计算结果为数字的任何表达式。表达式可以是变量、常数、函数和运算符的任意组合。),设置每次搜索的开始位置。如果省略,则从第一个字符位置开始搜索。如果 start 包含 Null (Null:可以在字段中输入或用于表达式和查询,以标明丢失或未知的数据。在 Visual
Basic 中,Null 关键字表示 Null 值。有些字段(如主键字段)不可以包含 Null 值。),将产生错误。如果指定 compare参数,则必须指定 start 参数。
string1 必选。要在其中进行搜索的字符串表达式 (字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以是:返回字符串或字符串 Variant
(VarType 8) 的函数;字符串字面值、常量、变量或 Variant。)。
string2 必选。被搜索的字符串表达式。
compare 可选。指定字符串比较 (字符串比较:使用操作符确定某一字符串是否大于或等于另一字符串。使用 Option
Compare 语句指定是进行二进制(区分大小写)比较,还是进行文字(不区分大小写)比较。)类型。如果 compare 为 Null,将产生错误。如果省略 compare,则比较类型由 Option
Compare 设置决定。请指定有效的 LCID(区域设置 ID),以在比较中使用区域设置特定的规则。

设置
compare 参数设置如下:
常量 值 说明
vbUseCompareOption -1 使用 Option
Compare 语句的设置执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。
vbDatabaseCompare 2 Microsoft
Office Access 2007 专用。根据数据库中的信息执行比较。

返回值
如果 则 InStr 返回
string1 长度为零 0
string1 为 Null Null
string2 长度为零 start
string2 为 Null Null
未找到 string2 0
在 string1 中找到 string2 找到匹配字符串的位置
start > string2 0

注解
如果字符串中包含字节数据,请使用 InStrB 函数。InStrB 不返回一个字符串在另一个字符串中第一次出现的字符位置,而是返回字节位置。
示例
在表达式中使用 InStr 函数 在任何可以使用表达式的地方都可以使用 InStr。例如,如果想要找出包含 IP 地址的字段(名为“IP 地址(IPAddress)”)中第一个句号 (.) 的位置,可以使用 InStr 进行查找,如下所示:
InStr(1,[IPAddress],".")
InStr 函数检查“IP 地址”字段中的每个值,并返回第一个句号的位置。因此,如果 IP 地址的第一个部分为 10.,该函数就会返回值 3。
然后就可以使用对 InStr 函数的输出执行操作的其他函数提取 IP 地址的第一个句号前的部分,如下所示:
Left([IPAddress],(InStr(1,[IPAddress],".")-1))
在此示例中,InStr(1,[IPAddress],".") 返回第一个句号的位置。将该值减 1 即可确定第一个句号前存在多少个字符,在本例中为 2。然后 Left 函数则会在“IP 地址”字段左边提取该数目的字符,并返回值 10。
在 VBA 代码中使用 InStr
注释 以下示例演示了此功能在 Visual
Basic for Applications (VBA) 模块中的使用。有关使用 VBA 的详细信息,请在“搜索”旁边的下拉列表中选择“开发人员参考”,然后在搜索框中输入一个或多个词条。
以下示例使用 InStr 函数返回一个字符串在另一个字符串中首次出现的位置。
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".

' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(4, SearchString, SearchChar, 1)

' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(1, SearchString, SearchChar, 0)

' Comparison is binary by default
' (last argument is omitted).
MyPos = Instr(SearchString, SearchChar) ' Returns 9.

MyPos = Instr(1, SearchString, "W") ' Returns 0.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: