我有类似的查询:
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>
答案 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取消撇号,那就行了。