Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 查询  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702554
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

在Jet SQL查询中,如何区分大小写?

作者:cg1  摘自:access911.net  :cg1  更新日期:2003-3-30  浏览人次:

 

问题:

sql问题!
在写查询的时候如何区分大小写
注意:注意:
情况分两种,一种是我在 查询 设计器里面直接作
另一种是在vbe界面里面用 docmd.runsql "select * from where a like '*ddEE*'"

注意,这里的 like '*ddEE*' 是要求区分大小写的, 'ddee' 或者 'DDee' 不允许出现在查询结果中。

 

方法一:

请参考 StrComp inStr 这两个函数。
在LIKE操作中一般使用INSTR函数,该函数的说明请参考

InStr 函数

返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

语法

InStr([start, ]string1, string2[, compare])

InStr 函数的语法具有下面的参数

部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compareOption Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。

设置

compare 参数设置为:

常数 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。

返回值

如果 InStr返回
string1 为零长度 0
string1 Null Null
string2 为零长度 Start
string2Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0

说明

InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。

一般可以这样:
select * from tablename where instr(1,fieldname,"字符",1)>0


 

方法二:

以下为MS的回答:
根据我的理解和经验,LIKE语句是不支持区分大小写的。但是,也许我们可以通过其它的方法来在一定程度上实现您所需要的功能。只能说是一定程度上,因为毕竟不可能像LIKE语句那么灵活的实现区分大小写

 
比如说:您希望实现类似LIKE “b*” 的功能,并且希望他是区分大小写的,我们可以这样写QUERY语句:

SELECT Customers.Name

FROM Customers

WHERE (((Asc([city]))>Asc("A") And (Asc([city]))<Asc("C")));

在这个语句中,我们通过 ASC 返回字符串首字母的ASCII码,然后再进行判断。

 

如果你希望能够实现类似于LIKE “abc*”的功能,并且希望他是区分大小写的,我们可以这样考虑QUERY语句:

SELECT Customers.City

FROM Customers

WHERE (((StrComp([city],"abc",0))=1)) AND (((Asc([city]))>Asc("a") And (Asc([city]))<Asc("c")));

 

通过上面的例子您可以看出,虽然我们能够通过变通的方法来实现查询中对于大小写的区分,但是相对来说是比较复杂的,还可能会造成一定性能的影响。并且如果您不能够正确判断所有可能出现的情况的话,查询得到的结果可能会是不正确的(比如,我希望实现LIKE “?a??A*”就非常难以判断了)。

更加详细的说明和帮助您可以参看
ACC2000: How to Return Case-Sensitive Matches in Queries
http://support.microsoft.com/?id=209674 

 

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利