【问题标题】:QueryExecute(): How to use SQL wildcard % search with a LIKE clause?QueryExecute():如何使用带有 LIKE 子句的 SQL 通配符 % 搜索?
【发布时间】:2025-12-29 15:00:07
【问题描述】:

我是 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>

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

【问题讨论】:

  • 与问题无关,但如果您要更新旧代码,不妨也换成较新的ANSI-99 JOIN syntax

标签: coldfusion coldfusion-11 coldfusion-2016


【解决方案1】:

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

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

【讨论】:

  • 该死,打败我!此外,数据源名称应括在引号中:datasource="person"
  • 如果它是字符串而不是变量则为真。所发布的示例存在很多关于引号开始和停止的语法问题,所以我不得不猜测应该/不应该引用什么。
  • 是的。我只知道,因为我用不同的查询对其进行了测试,CF 抱怨缺少引号。
  • 我不喜欢它,但我维护的应用程序到处都是datasource=session.dsn;所以我的想法选择不引用。我同意这里的报价看起来更好。
  • 哦,我明白你的意思了。这是有效的,因为它是一个变量。 (在 OP 的情况下它不是,因为名称是字符串文字,因此 CF 会查找名为“person”的变量,并在找不到时出错)。