如何使用LIKE和<cfqueryparam>在整数表中搜索值?</cfqueryparam>

时间:2011-09-22 15:47:17

标签: sql tsql coldfusion

我有类似的查询:

SELECT itemID FROM itemTable 项目ID类似'%123%'

itemTable的类型为INT。这个查询本身就可以正常工作,因为它会选择'12345'和'0912398'等...

当我尝试使用

时会出现问题

我们说var searchValue = 123

如果我尝试:<cfqueryparam cfsqltype='cf_sql_integer' value="'%#searchValue#%'" >
我得到* CFSQLTYPE CF_SQL_INTEGER的无效数据'123'。*

如果我尝试:<cfqueryparam cfsqltype='cf_sql_varchar' value="'%#searchValue#%'" >
我得 java.lang.Integer无法强制转换为java.lang.String

我尝试在我的SQL中使用CAST,并且在各个地方也使用toString(searchValue),但我总是最终得到上面的一条错误消息。有没有办法使用CFQUERYPARAM搜索和整数表?

编辑:下面是我尝试使用的实际代码......

CFSCRIPT代码:

var searchValue=123;
searchFilterQuery(qry=qItemResults, field="itemID", value=searchValue,cfsqltype="cf_sql_varchar");

CFC功能:

<!--- FILTER A QUERY WITH SEARCH TERM --->
<cffunction name="searchFilterQuery" access="public" returntype="query" hint="Filters a query by the given value" output="false">
    <!--- ************************************************************* --->
    <cfargument name="qry"          type="query"    required="true" hint="Query to filter">
    <cfargument name="field"        type="string"   required="true" hint="Field to filter on">
    <cfargument name="value"        type="string"   required="true" hint="Value to filter on">
    <cfargument name="cfsqltype"    type="string"   required="false" default="cf_sql_varchar" hint="The cf sql type of the value.">
    <!--- ************************************************************* --->
    <cfset var qryNew = QueryNew("")>
    <cfquery name="qryNew" dbtype="query">
        SELECT *
            FROM arguments.qry
            WHERE #trim(arguments.field)# LIKE <cfqueryparam cfsqltype="#trim(arguments.cfsqltype)#" value="#trim(arguments.value)#">
    </cfquery>
    <cfreturn qryNew>
</cffunction>

2 个答案:

答案 0 :(得分:3)

你需要这样做,我估计:

  • 删除引用,如人们所说

  • 使用VARCHAR参数,而不是INTEGER,因为%符号使您传递的值不是INTEGER

  • 将整数列作为数据库端的VARCHAR进行CAST。 DB可能会自动为您执行此操作,但我认为最好明确这些事情。

    SELECT itemID FROM itemTable WHERE CAST(itemId AS VARCHAR)LIKE&lt; cfqueryparam cfsqltype ='cf_sql_varchar'value =“%#searchValue#%”&gt;

答案 1 :(得分:0)

如果你使用varchar取消撇号,那就行了。