我有一个类似于这样的查询:
SELECT itemID FROM itemTable WHERE itemID LIKE '%123%'
itemTable 的类型是 INT。这个查询本身可以正常工作,因为它会选择 '12345' 和 '0912398' 等等...
问题出现在我尝试使用:
假设 var searchValue = 123
如果我尝试: 我会得到 *Invalid data '123' for CFSQLTYPE CF_SQL_INTEGER.*的错误。
如果我尝试: 我会得到 java.lang.Integer cannot be cast to java.lang.String 的错误。
我尝试在我的 SQL 中使用 CAST,以及在各个地方使用 toString(searchValue),但总是会得到上面的错误消息。有没有办法使用 CFQUERYPARAM 来搜索整数表?
编辑:以下是我试图使用的实际代码...
CFSCRIPT 代码:
SELECT itemID FROM itemTable WHERE itemID LIKE '%123%'
itemTable 的类型是 INT。这个查询本身可以正常工作,因为它会选择 '12345' 和 '0912398' 等等...
问题出现在我尝试使用:
假设 var searchValue = 123
如果我尝试: 我会得到 *Invalid data '123' for CFSQLTYPE CF_SQL_INTEGER.*的错误。
如果我尝试: 我会得到 java.lang.Integer cannot be cast to 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>
value
是一个有效的integer
,例如123
或者212
。但事实上,你正在传递的是字面字符串:'%123%'
。显然不是整数。因此会出现错误。 - Leigh