带参数和通配符的类SQL运算符

带参数和通配符的类SQL运算符,sql,ms-access,parameters,wildcard,sql-like,Sql,Ms Access,Parameters,Wildcard,Sql Like,我有一个查询,其中我想返回名称中包含某个字符串的所有客户端,其中任意一侧都有通配符。所以输入可以是“史密斯”,我想返回所有东西,比如“约翰·史密斯公司”或“史密斯兄弟”。我希望[Client]得到提示,因此我将SQL设置为: PARAMETERS Client Text ( 255 ); SELECT * WHERE (((tbl_IncomingChecks.Client) Like'%' + [Client] + '%') ORDER BY tbl_IncomingChecks.Clien

我有一个查询,其中我想返回名称中包含某个字符串的所有客户端,其中任意一侧都有通配符。所以输入可以是“史密斯”,我想返回所有东西,比如“约翰·史密斯公司”或“史密斯兄弟”。我希望[Client]得到提示,因此我将SQL设置为:

PARAMETERS Client Text ( 255 );
SELECT *
WHERE (((tbl_IncomingChecks.Client) Like'%' + [Client] + '%') 
ORDER BY tbl_IncomingChecks.Client;

查询未返回任何结果。请帮助

在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;

根据OP对RDBMS的更新,作为MS访问 如果有更复杂的模式,可以在MS Access UDF中使用
Regexp
对象。然而,在当前场景中,您最好使用
,比如Concat(“*”、@client“*”)

以下是如何在查询中使用上述函数:

SELECT *
FROM MYTABLE
WHERE RegexpFunc(tbl_IncomingChecks.Client, "Smith") 
ORDER BY tbl_IncomingChecks.Client;

我觉得你的问题出在“+”操作符上,不是吗

WHERE ((tbl_IncomingChecks.Client) Like Concat('%',[Client],'%')) 

这让我在DB2中明白了,您在语句中没有使用from

PARAMETERS Client Text ( 255 );
SELECT * from table

MS Access使用*作为通配符,而不是%,因此您的查询将尝试匹配文本“%”字符。除非您使用的是ADO,否则请改用*


您使用的是哪种DBMS?它可能太慢了。您的SQL是否支持
包含
如果支持,请使用它。Access中的连接语法是
&
,而不是
+
@msmucker0527通常最好使用-,正如您所说,但只要您了解+如何与null一起工作,就可以使用+。我故意省略了所有select语句。是的,但不是DB2或老式mysql。我是新手,边走边捡。CONCAT是一个未定义的函数。我正在使用access2007@user1940127请查看SQLFIDLE引用。”“REGEXP”通常是更好的用法:)如果您使用的是
MYSQL,ORACLE
那么MS ACCESS中没有内置的“REGEXP”函数。我刚刚注意到你在RDBMS上的更新。但是有一个“Regex”对象:)如果您有一个更大的、更具sohisticated的模式要匹配,那么我建议您使用
MS-Access-UDF
。否则,您可以将
REGEXP
替换为
LIKE
以适应MS ACCESS。我无法使用
LIKE
函数提取任何内容。代码应该如何读取?@user1940127在MS ACCESS中,您应该使用
*
而不是
%
,这是您自己的查询需要做的唯一更改。如果有一天您碰巧需要这些,我已经为您提供了另一种选择;)+1 Jet/ACE的通配符有点复杂,因为在MS Access中使用时,它几乎总是*的,但在MS Access之外使用Jet?ACE时,它总是%。
PARAMETERS Client Text ( 255 );
SELECT * from table