Coldfusion QueryExecute():如何将SQL通配符%search与LIKE子句一起使用?

Coldfusion QueryExecute():如何将SQL通配符%search与LIKE子句一起使用?,coldfusion,coldfusion-11,coldfusion-2016,Coldfusion,Coldfusion 11,Coldfusion 2016,我是ColdFusion新手,正在尝试查询一些东西并在cfscript中使用它。我不能在这里使用实际的代码,但这里有一个通用的SQL查询,我希望能有所帮助。这是一个旧脚本,我正在尝试将它从cfquery标记更改为cfscript标记 <cfscript> sqlCF = queryExecute("SELECT primarykey FROM names, personnel WHERE name.primaykey =

我是ColdFusion新手,正在尝试查询一些东西并在cfscript中使用它。我不能在这里使用实际的代码,但这里有一个通用的SQL查询,我希望能有所帮助。这是一个旧脚本,我正在尝试将它从cfquery标记更改为cfscript标记

<cfscript>
    sqlCF = queryExecute("SELECT primarykey FROM names, personnel  
                          WHERE name.primaykey = personnel.primarykey 
                          AND ( upper(personnel.ID LIKE upper(':id%') OR 
                                upper(personnel.userID) LIKE upper(':id%')
                              )
                        , {id={value = "xyz123", cfsqltype="cf_sql_varchar}}
                        , {datasource=person"}); 

writeDump(sqlCF);
</cfscript>

sqlCF=queryExecute(“从姓名、人员中选择primarykey
其中name.primaykey=personal.primarykey
和(upper(personal.ID如upper(':ID%'))或
upper(personal.userID)类似upper(“:id%”)
)
,{id={value=“xyz123”,cfsqltype=“cf_sql\u varchar}
,{datasource=person“});
writeDump(sqlCF);

当我运行它时,它显示为0个查询,但是当我硬编码它并将查询的
:id%
部分更改为
xyz123%
作为它的值时。我只是不知道类似的('XXXX%')是如何工作的,带有通配符,应该传递,或者这看起来是否正确。有什么想法吗?

您想将通配符附加到参数中的字符串,而不是查询字符串中。另外请注意,当我使用参数时,我没有将参数括在引号中

<cfscript>
    sqlCF = queryExecute("
        select primarykey
        from names, personnel
        where name.primaykey = personnel.primarykey
        and (
            upper(personnel.ID) LIKE upper(:id)
            or 
            upper(personnel.userID) LIKE upper(:id)
        )
    ",{
        id={
            value = "xyz123%",
            cfsqltype="cf_sql_varchar"
        }
    },
    {datasource="person"});
</cfscript>

sqlCF=queryExecute(“
选择primarykey
从姓名、人员
其中name.primaykey=personal.primarykey
及(
类似于upper(:ID)的upper(personal.ID)
或
类似于upper(:id)的upper(personal.userID)
)
",{
身份证={
value=“xyz123%”,
cfsqltype=“cf\u sql\u varchar”
}
},
{datasource=“person”});

您希望将通配符附加到参数中的字符串,而不是查询字符串中。另外请注意,当我使用参数时,我没有将参数括在引号中

<cfscript>
    sqlCF = queryExecute("
        select primarykey
        from names, personnel
        where name.primaykey = personnel.primarykey
        and (
            upper(personnel.ID) LIKE upper(:id)
            or 
            upper(personnel.userID) LIKE upper(:id)
        )
    ",{
        id={
            value = "xyz123%",
            cfsqltype="cf_sql_varchar"
        }
    },
    {datasource="person"});
</cfscript>

sqlCF=queryExecute(“
选择primarykey
从姓名、人员
其中name.primaykey=personal.primarykey
及(
类似于upper(:ID)的upper(personal.ID)
或
类似于upper(:id)的upper(personal.userID)
)
",{
身份证={
value=“xyz123%”,
cfsqltype=“cf\u sql\u varchar”
}
},
{datasource=“person”});

Darn,别客气!另外,数据源名称应该用引号括起来:
datasource=“person"
。如果它是字符串而不是变量,则为True。发布的示例在引用开始和停止时存在相当多的语法问题,因此我不得不猜测应该/不应该引用什么。是的。我只知道,因为我使用不同的查询对其进行了测试,CF抱怨缺少引号。我不喜欢它,但应用程序我维护的ns中充斥着
datasource=session.dsn
;因此我的大脑选择了不加引号。我同意引号在这里看起来更好。哦,我明白你的意思。这是因为它是一个变量。(OP的情况下不起作用,因为名称是字符串文字,所以CF会查找名为“person”的变量,如果找不到则会出错).Darn,别客气!另外,数据源名称应该用引号括起来:
datasource=“person”
。如果它是字符串而不是变量,则为True。发布的示例在引用开始和停止时存在相当多的语法问题,因此我不得不猜测应该/不应该引用什么。是的。我只知道,因为我使用不同的查询对其进行了测试,CF抱怨缺少引号。我不喜欢它,但应用程序我维护的ns中充斥着
datasource=session.dsn
;因此我的大脑选择了不加引号。我同意引号在这里看起来更好。哦,我明白你的意思。这是因为它是一个变量。(OP的情况下不起作用,因为名称是字符串文字,所以CF会查找名为“person”的变量,如果找不到则会出错)。与问题无关,但如果您正在更新旧代码,也可能会更改为新代码。与问题无关,但如果您正在更新旧代码,也可能会更改为新代码。