Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2733|回复: 4

[已解决]请问用SQL查询时,能否忽略0和o(零和字母O)的差别

[复制链接]
发表于 2013-5-9 12:40 | 显示全部楼层 |阅读模式
现实生活有,经常会发生以下混淆:
    A0(A+零)  AO(A+字母O)
    A1l(A+壹+字母l)    All(A+字母l+字母l)
    等等
当我看到纸上写的 “ All ”时,并不确定A后面是两个”一“,还是两个小写“L",或是一样一个,所以想忽略差异,

请问用SQL查询数据库时,能否在忽略这些混淆?

比如查询  A1l (A+壹+字母l) 时,连同   All(A+字母l+字母l)  、  A1l (A+数字1+字母l) 、  Al1 (A+字母l+ 数字1 )  、 A11 (A+ 数字1 + 数字1 ) 一起查询出来。

请问可以吗?怎么写代码呢?谢谢!

最佳答案
2013-5-9 14:08
在字符串比较中使用通配符

内置的模式匹配方法提供了一个用于字符串比较的通用工具。下表中展示了可以用于 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 开头的感叹号 (!) 表示:如果在 expression 中发现的字符不在 charlist 中,则进行匹配。感叹号用在方括号外面时,将与自身匹配。
可以将连字符 (-) 用于 charlist 的开头(如果用了感叹号,则放在感叹号之后)或末尾以便与其自身匹配。如果用于任何其他位置,则标识 ANSI 字符的范围。
指定一系列字符时,这些字符必须以升序排序次序显示(A-Z 或 0-100)。[A-Z] 是有效模式,而 [Z-A] 是无效模式。
将忽略字符顺序 [ ];该顺序被视为一个零长度字符串 ("")。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-9 13:00 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-5-9 13:05 | 显示全部楼层
hwc2ycy 发表于 2013-5-9 13:00
用问号来代替吧。

可能我没太说清楚,比如我在”型号“ 查询,但是型号有太多了,而且1或L的位置和数量都不确定,而且要查询的值中是否有L和1也不确定。我以前用Excel表做数据库时,是这样查询的:
查询值=Lcase(replace(replace(查询值,"1","l"),"0","o"))
For each Cel in Col.cells
    if Lcase(Cel)=查询值 then ………………
Next Cel

不知道在Access数据库中,能否实现这样的模糊查询?
谢谢
回复

使用道具 举报

发表于 2013-5-9 13:53 | 显示全部楼层
mansohu 发表于 2013-5-9 13:05
可能我没太说清楚,比如我在”型号“ 查询,但是型号有太多了,而且1或L的位置和数量都不确定,而且要查询 ...

你直接用以前的方法,把l,o替换成问号就成了。

回复

使用道具 举报

发表于 2013-5-9 14:08 | 显示全部楼层    本楼为最佳答案   
在字符串比较中使用通配符

内置的模式匹配方法提供了一个用于字符串比较的通用工具。下表中展示了可以用于 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 开头的感叹号 (!) 表示:如果在 expression 中发现的字符不在 charlist 中,则进行匹配。感叹号用在方括号外面时,将与自身匹配。
可以将连字符 (-) 用于 charlist 的开头(如果用了感叹号,则放在感叹号之后)或末尾以便与其自身匹配。如果用于任何其他位置,则标识 ANSI 字符的范围。
指定一系列字符时,这些字符必须以升序排序次序显示(A-Z 或 0-100)。[A-Z] 是有效模式,而 [Z-A] 是无效模式。
将忽略字符顺序 [ ];该顺序被视为一个零长度字符串 ("")。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 04:22 , Processed in 0.427675 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表