我有一个查询,我希望返回名称中具有某个字符串的所有客户端,并且两边都有通配符。所以输入可能是“史密斯”,我想返回所有的东西,如“约翰史密斯公司”或“史密斯和兄弟”。我希望提示[客户端],所以我设置了这样的SQL:
PARAMETERS Client Text ( 255 );
SELECT *
WHERE (((tbl_IncomingChecks.Client) Like'%' + [Client] + '%')
ORDER BY tbl_IncomingChecks.Client;
查询未返回任何结果。请帮忙
答案 0 :(得分:6)
MS Access使用*作为通配符而非%,因此您的查询将尝试匹配文字'%'字符。除非您使用ADO,否则请使用*。
http://office.microsoft.com/en-us/access-help/like-operator-HP001032253.aspx
答案 1 :(得分:1)
我觉得你的问题出现在'+'运算符上,不应该阅读
WHERE ((tbl_IncomingChecks.Client) Like Concat('%',[Client],'%'))
这让我进入了DB2
答案 2 :(得分:0)
如何在MYSQL中使用REGEXP
函数?
SELECT *
WHERE tbl_IncomingChecks.Client REGEXP concat('%', @Client, '%')
ORDER BY tbl_IncomingChecks.Client;
或者只是简单地使用@client作为REGEXP
来查找包含此客户名称的所有客户端:
SELECT *
WHERE tbl_IncomingChecks.Client REGEXP @Client
ORDER BY tbl_IncomingChecks.Client;
如果您有更复杂的模式,则可以在MS Access UDF中使用Regexp
对象。但是在当前情况下,您最好使用LIKE Concat('*',@client,'*')
'-- you may even send the pattern as a parameter
'-- you may also send all the clients into the UDF itself for matching
'-- returning a set of matched names string
Function regexpFunc(ByRef strInput As String, ByRef clientName as String) As Boolean
Dim myRegex As New RegExp
Dim matchSet As MatchCollection
With myRegex
.MultiLine = False
.Global = True
.IgnoreCase = False
End With
myRegex.Pattern = clientName
If myRegex.Test(strInput) Then
'matching values can be collected here
'-- Set matchSet = myRegex.Execute(strInput)
RegexFunc = True
Else
RegexFunc = False
End If
End Function
以下是您在查询中使用上述功能的方法:
SELECT *
FROM MYTABLE
WHERE RegexpFunc(tbl_IncomingChecks.Client, "Smith")
ORDER BY tbl_IncomingChecks.Client;
答案 3 :(得分:0)
您未在声明中使用
PARAMETERS Client Text ( 255 );
SELECT * from table