带参数和通配符的类SQL运算符
我有一个查询,其中我想返回名称中包含某个字符串的所有客户端,其中任意一侧都有通配符。所以输入可以是“史密斯”,我想返回所有东西,比如“约翰·史密斯公司”或“史密斯兄弟”。我希望[Client]得到提示,因此我将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
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