Coldfusion cfscript和queryExecute()使用like而不是equals

Coldfusion cfscript和queryExecute()使用like而不是equals,coldfusion,cfml,Coldfusion,Cfml,我很好奇在cfscript函数中使用queryExecute()时,这是否是使用like运算符的正确方法 if( len(arguments?.lastName) ){ local.sqlWhere & = " AND t_lastname LIKE :lName"; local.sqlParams.lName = { value : arguments.lastName & '%', cfsqltype:'cf_sql_varchar'}; }; 它只是像一个

我很好奇在cfscript函数中使用queryExecute()时,这是否是使用like运算符的正确方法

if( len(arguments?.lastName) ){
    local.sqlWhere & = " AND t_lastname LIKE :lName";
    local.sqlParams.lName = { value : arguments.lastName & '%', cfsqltype:'cf_sql_varchar'};
};

它只是像一个带&'%'的字符串一样附加吗?

我刚刚讨论了你的问题。在coldfusion&symbol中,始终将两个字符串连接在一起。所以我们不能这样使用。这里我为您编写了一些示例代码,请检查一下。我希望写一个基于脚本的查询会更有帮助

local.MyQry = "SELECT * FROM Users WHERE 1=1 ";
我从你那里用过同样的条件。不确定你的情况

if( len(arguments?.lastName) ){

    local.MyQry &= " AND Email like :email"
}
这里,如果条件为true,则将查询与前一个查询连接起来。并提到:(冒号,我们将用作queryparam)

您可以根据您的场景在此处指定
%
符号。例如
%#参数。电子邮件#
。或
%#参数。电子邮件%


我希望这会对你有更多帮助。谢谢你的回答。有趣的是,在CF2016上,我的示例代码也能按预期工作,所以任何一种方式都能工作。是的。通配符必须是值的一部分。事实上,它在一个结构内没有区别。最终,它只是将变量和字符串文字连接起来。所以结果是一样的。可能重复的
local.qry = new Query( datasource = 'your DB name' , sql = Local.MyQry);

if( len(arguments?.lastName) ){
     local.qry.addParam( name="email", value="%#Arguments.email#%", cfsqltype="cf_sql_varchar");

}
return local.qry.execute();