现在的位置: 首页 > 综合 > 正文

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

2013年02月23日 ⁄ 综合 ⁄ 共 2773字 ⁄ 字号 评论关闭
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.

抱歉!评论已关闭.