asp+access 备注类型字段特殊字符模糊查询的问题
我的access数据库有一个表tmyq,类型是备注型的,里面含有特殊字符,我用asp进行模糊查询总是出错。例如查询数据库里面含有“请打开[xls-2.xls]文件”的记录...
我的access数据库有一个表tmyq,类型是备注型的,里面含有特殊字符,我用asp进行模糊查询总是出错。
例如查询数据库里面含有“请打开[xls-2.xls]文件”的记录总是出错,求高人解答,可以追加悬赏,先谢谢了!!! 展开
例如查询数据库里面含有“请打开[xls-2.xls]文件”的记录总是出错,求高人解答,可以追加悬赏,先谢谢了!!! 展开
2个回答
展开全部
select * from t1 where f2 like '*请打开[[]xls-2.xls]文件*'
注意:串中的*、?、#、[、-均要用[]括在中间
access文档中有描述:
下表演示如何使用 Like 来测试不同模式的表达式。
匹配类型
模式
匹配(返回 True)
不匹配(返回 False)
多个字符 a*a aa、aBa 和 aBBBa aBC
*ab* abc、AABB 和 Xab aZb 和 bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg 和 abc cab 和 aab
单个字符 a?a aaa、a3a 和 aBa aBBBa
单个数字 a#a a0a、a1a 和 a2a aaa 和 a10a
字符范围 [a-z] f、p 和 j 2 和 &
范围之外 [!a-z] 9、& 和 % b 和 a
非数字值 [!0-9] A、a、& 和 ~ 0、1 和 9
复合值 a[!b-m]# An9、az0 和 a99 abc 和 aj0
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] 是无效模式。
将忽略字符顺序 [ ];该顺序被视为一个零长度字符串 ("")。
注意:串中的*、?、#、[、-均要用[]括在中间
access文档中有描述:
下表演示如何使用 Like 来测试不同模式的表达式。
匹配类型
模式
匹配(返回 True)
不匹配(返回 False)
多个字符 a*a aa、aBa 和 aBBBa aBC
*ab* abc、AABB 和 Xab aZb 和 bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg 和 abc cab 和 aab
单个字符 a?a aaa、a3a 和 aBa aBBBa
单个数字 a#a a0a、a1a 和 a2a aaa 和 a10a
字符范围 [a-z] f、p 和 j 2 和 &
范围之外 [!a-z] 9、& 和 % b 和 a
非数字值 [!0-9] A、a、& 和 ~ 0、1 和 9
复合值 a[!b-m]# An9、az0 和 a99 abc 和 aj0
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] 是无效模式。
将忽略字符顺序 [ ];该顺序被视为一个零长度字符串 ("")。
展开全部
关于你的这个问题,处理起来比较复杂,其主要原因是带了一对括号."[ ]" 这个,在Access中是通配符.
要解决你的这个问题有两种方法
第一:在数据入库前就进行字符替换.这个就目前来说,显然不是你所需要的.
第二:就是遍历数据记录,在记录循环中使用instr进行查找
例如:
tests="请打开[xls-2.xls]文件"
梁告Set Rs=Server.CreateObject("Adodb.Recordset")
Sql="Select * From [ProductList]"
Rs.Open Sql,Conn,1,1
If Not(Rs.bof and Rs.eof) Then
Do While Not Rs.eof
岩渣磨 If Instr(Rs("product"),tests) Then
response.Write Rs("product")
End If
粗斗 Rs.Movenext
Loop
End If
Rs.close
Set Rs=nothing
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询