1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ACCESS模糊查询like的解决方法SQL查询语句通配符问题

ACCESS模糊查询like的解决方法SQL查询语句通配符问题

时间:2024-01-20 09:06:06

相关推荐

ACCESS模糊查询like的解决方法SQL查询语句通配符问题

前言:

ACCESS的通配符和SQLSERVER的通配符比较

===================================================

ACCESS库的通配符为:

*与任何个数的字符匹配

?与任何单个字母的字符匹配

SQLServer中的通配符为:

%与任何个数的字符匹配

_与单个字符匹配

正文

我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:

SELECT*FROMt_foodWHEREt_food.namelike'*苹果*'

去GOOGLE搜搜发现,ASP中模糊查询要这样写:

SELECT*FROMt_foodWHEREt_food.namelike'%%苹果%%'

必须是“%”,而且要两个。大家多注意。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SQL查询语句通配符问题

在Access中用SQL语句进行数据查询时,用了通配符*进行查询。语句如下:

SELECT*fromnormalwherebooknamelike'*h*'

在Access的SQL视图中试验没有任何问题,工作一切正常。于是将SQL语句写入到C#程序中,结果一到查询语句时就出错跳出,百思不得其解。于是查找Access帮助文件,找到如下帮助:

将字符串表达式与SQL表达式中的模式进行比较。

语法

expressionLike"pattern"

Like运算符语法包含以下部分:

部分说明

expression在WHERE子句中使用的SQL表达式。

pattern与expression进行比较的字符串文字。

说明

可以通过Like运算符来查找与所指定的模式相匹配的字段值。对于pattern,可以指定完整的值(例如Like"Smith"),也可以使用通配符来查找某个范围内的值(例如Like"Sm*")。

在表达式中,可以使用Like运算符来比较字段值与字符串。例如,如果在SQL查询中输入Like"C*",那么该查询将返回所有以字母C开头的字段值。在参数查询中,可以提示用户键入要搜索的模式。

下面的示例返回以字母P开头并且后面为A到F之间任何字母以及三个数字的数据:

Like"P[A-F]###"

下表展示了如何通过Like来测试不同模式的表达式。

匹配类型

模式匹配

(返回True)不匹配

(返回False)

多个字符a*aaa,aBa,aBBBaaBC

*ab*abc,AABB,XabaZb,bac

特殊字符a

aa*aaaa

多个字符ab*abcdefg,abccab,aab

单个字符a?aaaa,a3a,aBaaBBBa

单个数字a#aa0a,a1a,a2aaaa,a10a

字符范围[a-z]f,p,j2,&

范围之外[!a-z]9,&,%b,a

非数字值[!0-9]A,a,&,~0,1,9

复合值a[!b-m]#An9,az0,a99abc,aj0

参考地址:/zh-cn/assistance/HP010322532052.aspx

///

帮助都这么写了,没有任何问题啊,到底问题是出在哪里呢?更加让本人迷惑。后来问了一下同事说:你的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]可以匹配任何字母数字字符。

请注意,ANSISQL通配符(%)和(_)仅在Microsoft?Jet4.X版本和MicrosoftOLEDBProviderforJet中才是有效的。如果用在MicrosoftAccess或DAO中,那么它们被视为文本。

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

在charlist的开头使用感叹号(!)将表示如果在charlist以外的任何字符出现在expression中,则发生匹配。当它用在方括号的外面时,感叹号匹配它自身。

可以将连字符号(-)用于charlist的开头(感叹号之后)或末尾以匹配它自身。在其他任何位置中,连字符号标识一个ANSI字符范围。

指定了一个字符范围时,字符必须以升序排列出现(A-Z或0-100)。[A-Z]是有效的模式,[Z-A]是无效模式。

忽略字符顺序[];它被视为一个零长度字符("")。

参考地址:/zh-cn/assistance/HP010322842052.aspx

///

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

通配符:

通配符描述示例

%包含零个或更多字符的任意字符串。WHEREtitleLIKE'%computer%'将查找处于书名任意位置的包含单词computer的所有书名。

_(下划线)任何单个字符。WHEREau_fnameLIKE'_ean'将查找以ean结尾的所有4个字母的名字(Dean、Sean等)。

[]指定范围([a-f])或集合([abcdef])中的任何单个字符。WHEREau_lnameLIKE'[C-P]arsen'将查找以arsen结尾且以介于C与P之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen等。

[^]不属于指定范围([a-f])或集合([abcdef])的任何单个字符。WHEREau_lnameLIKE'de[^l]%'将查找以de开始且其后的字母不为l的所有作者的姓氏。

将通配符作为文字使用

可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用LIKE关键字和[]通配符的示例。

符号含义

LIKE'5[%]'5%

LIKE'[_]n'_n

LIKE'[a-cdf]'a、b、c、d或f

LIKE'[-acdf]'-、a、c、d或f

LIKE'[[]'[

LIKE']']

LIKE'abc[_]d%'abc_d和abc_de

LIKE'abc[def]'abcd、abce和abcf

使用ESCAPE子句的模式匹配

可搜索包含一个或多个特殊通配符的字符串。例如,customers数据库中的discounts表可能存储含百分号(%)的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供ESCAPE关键字和转义符。例如,一个样本数据库包含名为comment的列,该列含文本30%。若要搜索在comment列中的任何位置包含字符串30%的任何行,请指定由WHEREcommentLIKE'%30!%%'ESCAPE'!'组成的WHERE子句。如果不指定ESCAPE和转义符,SQLServer将返回所有含字符串30的行。

下例说明如何在pubs数据库titles表的notes列中搜索字符串"50%offwhen100ormorecopiesarepurchased":

SELECTnotesFROMtitlesWHEREnotesLIKE'50%%offwhen100ormorecopiesarepurchased'ESCAPE'%'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。